Interessantissimo articolo scritto da Alessandro Del Sole su come programmare la TaskBar in W7 con WPF.
Qui la prima parte
Qui la seconda
Complimenti Alessandro
Interessantissimo articolo scritto da Alessandro Del Sole su come programmare la TaskBar in W7 con WPF.
Qui la prima parte
Qui la seconda
Complimenti Alessandro
Week-End interamente dedicato all’istallazione di Windows 7 RTM su tutte le workstation e portatili di casa. Come già appurato nelle precedenti versioni beta e la RC Windows 7 è un sistema molto più stabile e molto meno esigente di risorse. Questo si traduce in una maggiore velocità di utilizzo e piacevolezza nello spostarsi tra un’applicazione e l’altra.
Fin qui nessun problema tranne quando non mi sono imbattuto in qualche problema abbastanza serio per chi, come me, sviluppa anche applicazioni per Windows Mobile:
Eseguendo Cellular Emulator sul mio portatile (sul quale ho installato il sistema X64) mi vedo venir fuori questo errore:
Girando sul forum MSDN vedo che l’emulatore non è supportato dal sistema operativo in questione!!! ARGHHHHH!!!!!
Bene, dopo la breve incazzatura decido di mettere su la “WINDOWS XP MODE” che permette di virtualizzare Windows XP su Windows 7 in tempi rapidissimi ma nel momento in cui lancio la macchina virtuale:
il problema è dovuto al fatto che sulla mia macchina non è possibile attivare lato bios la virtualizzazione hardware e Windows Virtual Pc non può farne a meno!!
Risultato: sul mio portatile sarò costretto ad installare Windows 7 32 bit o crearmi una macchina virtuale con VMWare
Ad una nuova installazione di Sql Server e quando faccio l’attach di un DB proveniente da Sql 2000 ho sempre il solito errore nel momento in cui cerco di aprire i diagrammi:
“Database diagram support objects cannot be installed because this database does not have a valid owner. To continue, first use the Files page of the Database Properties dialog box or the ALTER AUTHORIZATION statement to set the database owner to a valid login, then add the database diagram support objects.”
Vi posto il codice da eseguire per ovviare a questo fastidioso problema che non viene via nemmeno impostando la compatibilità su Sql 2005 nelle option del DB
use [master] EXEC sp_dbcmptlevel 'TuoDatabase', '90';
go
ALTER AUTHORIZATION ON DATABASE::TuoDatabase TO tuoLogin
go
use [TuoDatabase]
go
EXECUTE AS USER = N'dbo' REVERT
go
Spero vi sia utile![]()
A chi non è mai venuto in testa di crittare i propri dati in maniera abbastanza sicura? A me di certo capita tutti i giorni. Spero che questo breve tutorial possa aiutarvi a realizzare una encription abbastanza potente:
Vi allego la classe pronta all’utilizzo:
Vi basterà importarla nel vostro codice:
ImportsWindowsApplication1.StringExtensions
ed utilizzare i metodi in questo modo:
Dim stringaDaCrittare = "Ciao Gaetano" Dim stringaCrittata As String stringaCrittata = stringaDaCrittare.Trim.CryptFromString("gaetano")
In questo modo abbiamo crittato la nostra stringa “stringaDaCrittare” con il metodo Rfc2898DeriveBytes messo a disposizione già dal Framework 2.0. Il metodo “CryptFromString” necessita si una password di crittazione assegnata ogni volta dall’utente (password di crittaggio e decrittaggio devono coincidere ovviamente)
Dim stringaCrittata = "A8 B4 C9 F1 A2" Dim stringaDaDecrittare As String stringaDaDecrittare = stringaCrittata.Trim.DecryptFromString("gaetano")
…qualora voleste decrittare una stringa precedentemente crittata con lo stesso metodo (e password!)
Semplice no?
Riferimenti alla classe “Rfc2898DeriveBytes” qui
Con il seguente codice avrete la possibilità di gestire l’autenticazione del report principale e di tutti i sottoreport da esso richiamati, oltre alla possibilità di passare eventuali parametri impostati nel report (nell’esempio vengono letti da quarystring, ma potrebbero benissimo essere parametri di session…). Il mio problema era proprio quello di settare i parametri di connessione dei singoli sottoreport. E’ la funzione “SetDBLogonForSubreports” che svolge questo compito.
Spero possa esservi di aiuto: (prerequisiti: Visual Studio 2005 e CrystalReports)
Imports CrystalDecisions.CrystalReports.Engine Imports CrystalDecisions.Shared Imports System.IO Partial Class _Default Inherits System.Web.UI.Page Private MyReport As ReportDocument Private Sub ConfigureCrystalReports() 'carico il report MyReport = New ReportDocument() Dim reportPath As String = Server.MapPath("TuoReportMaster.rpt") MyReport.Load(reportPath) 'passo i parametri di connessione al report Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo() 'parametri presenti nel webconfig myConnectionInfo.DatabaseName = System.Configuration.ConfigurationManager.AppSettings("Database") myConnectionInfo.UserID = System.Configuration.ConfigurationManager.AppSettings("UserName") myConnectionInfo.Password = System.Configuration.ConfigurationManager.AppSettings("Password") myConnectionInfo.ServerName = System.Configuration.ConfigurationManager.AppSettings("Server") 'autentico il mio report principale SetDBLogonForReport(myConnectionInfo, MyReport) 'autentico tutti i sottoreport richiamati dal report principale SetDBLogonForSubreports(myConnectionInfo, MyReport) 'passo eventuali parametri al report principale Dim paramFields As New ParameterFields() Dim discreteVal As New ParameterDiscreteValue() Dim parametro1 As New ParameterField() Dim parametro2 As New ParameterField() 'passo il primo parametro parametro1.ParameterFieldName = "@Parametro1DelReport" discreteVal = New ParameterDiscreteValue() discreteVal.Value = Request.QueryString("Parametro1") 'in questo caso leggo da una querysting MyReport.SetParameterValue("@Parametro1DelReport", discreteVal.Value) 'passo il secondo parametro parametro2.ParameterFieldName = "@Parametro2DelReport" discreteVal = New ParameterDiscreteValue() discreteVal.Value = Request.QueryString("Parametro1") 'secondo parametro anche passato in querysting MyReport.SetParameterValue("@Parametro1DelReport", discreteVal.Value) End Sub Private Sub SetDBLogonForReport(ByVal myConnectionInfo As ConnectionInfo, ByVal myReportDocument As ReportDocument) 'subroutine che setta i parametri di connessione del report principale Dim myTables As Tables = myReportDocument.Database.Table Dim myTable As CrystalDecisions.CrystalReports.Engine.Table For Each myTable In myTables Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo myTableLogonInfo.ConnectionInfo = myConnectionInfo myTable.ApplyLogOnInfo(myTableLogonInfo) Next End Sub Private Sub SetDBLogonForSubreports(ByVal myConnectionInfo As ConnectionInfo, ByVal myReportDocument As ReportDocument) 'subroutine che setta i parametri di connessione di 'tutti i sottoreport richiamati dal report principale Dim mySections As Sections = myReportDocument.ReportDefinition.Sections Dim mySection As Section For Each mySection In mySections Dim myReportObjects As ReportObjects = mySection.ReportObjects Dim myReportObject As ReportObject For Each myReportObject In myReportObjects If myReportObject.Kind = ReportObjectKind.SubreportObject Then Dim mySubreportObject As SubreportObject = CType(myReportObject, SubreportObject) Dim subReportDocument As ReportDocument = mySubreportObject.OpenSubreport mySubreportObject.SubreportName) SetDBLogonForReport(myConnectionInfo, subReportDocument) End If Next Next End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 'richiamo i parametri di configurzione ConfigureCrystalReports() 'esporto il report in pdf Dim oStream As New MemoryStream ' // using System.IO oStream = MyReport.ExportToStream (CrystalDecisions.Shared.ExportFormatType.PortableDocFormat) Response.Clear() Response.Buffer = True Response.ContentType = "application/pdf" Response.BinaryWrite(oStream.ToArray()) Response.End() End Sub End Class
Se tutto è stato impostato correttamente dovreste vedere il vostro bel pdf saltare fuori
In questi giorni mi sono dedicato interamente allo sviluppo di un’applicazione client ed avevo l’esigenza di modificare continuamente da form la connessione al Database (sqlServer). Immaginate quanto sia seccante ogni volta andare nell’ app.config e cambiare ogni volta i parametri. Beh..ecco un trucchetto che potrebbe esservi utile per fare una cosa del genere a Runtime:
Ovviamente non abbiamo accesso in scrittura all’app.config quindi la prima cosa da fare è crearci una Property all’interno del namespace My in questo modo:
Public WriteOnly Property RunTimeConnectionString() As String Set(ByVal value As String) My.Settings("MiaConnectionString") = value End Set End Property
Bene..ora nell’evento MySettings_PropertyChanged (cioè alla modifica delle nostre impostazioni) testiamo la connessione (non è obbligatorio ma facciamolo per evitare che l’applicazione vada in crash ![]()
Private Sub MySettings_PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Handles Me.PropertyChanged Dim connection As New SqlClient.SqlConnection connection.ConnectionString = My.Settings("MiaConnectionString") Try connection.Open() Catch ex As Exception MsgBox("Errore di connessione al Database. Verificare la connessione", MsgBoxStyle.Critical, "Connessione") Finally connection.Close() End Try End Sub
Ok..ci siamo quasi. Ora creiamoci una bella form dove inserire i dati relativi alla nostra connessione al Database. Creiamo qualcosa di simile:
Ora non ci resta che salvare le impostazioni relative alla nostra connessione mediante la chiamata alla nostra Property creata in precedenza in questo modo:
My.Settings.RunTimeConnectionString = "Data Source=" & ServerTxt.Text & ";Initial Catalog= " & dbTxt.Text & ";Persist Security Info=True; User ID=" & userTxt.Text & "; Password=" & passTxt.Text
Le informazioni relative nostra conenssione sono state aggiornate!!! ![]()