Sich dynamisch verändernde MySQL-Verbindungszeichenfolge zu Crystal Reports
Ich bin mit CrystalReportViewer
und CrystalReportSource
zu laden und anzeigen ein .die rpt-Datei in meine Anwendung.
Die situation, die ich habe, ist diese:
Sagen eine person erstellt ein Crystal-Reports-berichten außerhalb meiner Anwendung und legen Sie die datasource für die Datenbank. Dann nutze ich das .die rpt-Datei in meine Anwendung, aber ich brauche es zu binden, um eine andere Datenbank (identisch mit dem original im Hinblick auf die Tabellen-Struktur-und Spalten-Namen, aber mit einer anderen connection string und user-name und Passwort).
Wie mache ich das in VB.NET code?
Derzeit lade ich den Bericht mit:
Public Function SetReportSource(ByVal RptFile As String) As ReportDocument
Try
Dim crtableLogoninfo As New TableLogOnInfo()
Dim crConnectionInfo As New ConnectionInfo()
Dim CrTables As Tables
Dim CrTable As Table
If System.IO.File.Exists(RptFile) Then
Dim crReportDocument As New ReportDocument()
crReportDocument.Load(RptFile)
With crConnectionInfo
.ServerName = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=localhost;Port=3306;UID=root;"
.DatabaseName = gDatabaseName
.UserID = gServerUser
.Password = gServerPassword
End With
CrTables = crReportDocument.Database.Tables
For Each CrTable In CrTables
CrTable.ApplyLogOnInfo(crtableLogoninfo)
CrTable.LogOnInfo.ConnectionInfo.ServerName = crConnectionInfo.ServerName
CrTable.LogOnInfo.ConnectionInfo.DatabaseName = crConnectionInfo.DatabaseName
CrTable.LogOnInfo.ConnectionInfo.UserID = crConnectionInfo.UserID
CrTable.LogOnInfo.ConnectionInfo.Password = crConnectionInfo.Password
'Apply the schema name to the table's location
CrTable.Location = gDatabaseName & "." & CrTable.Location
Next
crReportDocument.VerifyDatabase()
SetReportSource = crReportDocument
Else
MsgBox("Report file not found...", MsgBoxStyle.Critical, proTitleMsg)
End If
Catch ex As Exception
System.Windows.Forms.MessageBox.Show("Error Found..." & vbCrLf & "Error No : " & Err.Number & vbCrLf & "Description :" & Err.Description & vbCrLf & vbCrLf & "Line no : " & Err.Erl & vbCrLf & "Procedure name : SetReportSource" & vbCrLf & "Module name : GeneralFunctions", proTitleMsg)
End Try
End Function
InformationsquelleAutor Kannan | 2011-06-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, wie ich es Tat. Ich war mit Oracle mit ODBC auf ASP.NET aber Sie sollten in der Lage sein, das gleiche zu tun mit MySQL und ODBC:
Als Teil der legacy-Anwendung aktualisieren, die ich getan habe, habe ich beschlossen, verschieben Sie die Crystal Reports-berichten für eine Web-Anwendung lieber, dass die Benutzer direkt darauf zugreifen, um Crystal Reports XI über Citrix, das war die Methode, die Sie verwendet haben. Dies hat mehrere Vorteile, die primäre als die Geschwindigkeit. Ein problem, das mich geplagt wurde, so ändern Sie die Anmeldeinformationen zur Laufzeit, so dass die Anwendung automatisch auf den richtigen Oracle-Datenbank (Entwicklung, test oder Produktion) basiert auf die server der report zugegriffen wurde.
Die Lösung, die ich fand war der Aufbau der Oracle-Datenbank-Verbindung als einen DSN im ODBC, und die Verbindung zu der ODBC-DSN, anstatt mit den Oracle-Client direkt. Dies ist nicht der einzige Weg, es zu tun, aber es scheint der beste Weg zu sein für meine Zwecke.
In der code-behind-Datei für die Seite mit der Crystal Reports Viewer, stellte ich den folgenden code für das gleiche Ereignis, durch das der Betrachter.
Logon-info oben kann leicht gespeichert werden in web.config anstelle von hart-Codierung wie oben.
Übrigens, ich spannte meine Crystal Reports Viewer in einem ASP.NET AJAX-Update-Panel, das ist der Grund, warum die reportsource " eingestellt wird der Betrachter ist in einer Sitzungsvariablen gespeichert. Wenn Sie wählen, dies zu tun, muss der viewer-Datenbindung in das Init-Ereignis (nicht das Load-Ereignis), um zu zeigen, richtig.
InformationsquelleAutor Deep in the Code