Imports CrystalDecisions
Imports CrystalDecisions.CrystalReports
Imports CrystalDecisions.Shared
Imports CrystalDecisions.CrystalReports.Engine
Public Class GenericCrystalLogin
Public Shared Sub SetConnectionInfo(ByVal RptDoc As Engine.ReportDocument, _
ByVal CnnInfo As [Shared].ConnectionInfo, ByVal CnnInfo2 As [Shared].ConnectionInfo)
For Each t As CrystalDecisions.CrystalReports.Engine.Table In RptDoc.Database.Tables
ApplyLogOnInfoToDatabaseTable(CnnInfo, t)
Next
For Each sec As CrystalDecisions.CrystalReports.Engine.Section In RptDoc.ReportDefinition.Sections
For Each RptObj As CrystalDecisions.CrystalReports.Engine.ReportObject In sec.ReportObjects
If RptObj.Kind = ReportObjectKind.SubreportObject Then
Dim SubRptObj As CrystalReports.Engine.SubreportObject = RptObj
Dim SubRpt As CrystalDecisions.CrystalReports.Engine.ReportDocument = SubRptObj.OpenSubreport(SubRptObj.SubreportName)
For Each tbl As CrystalDecisions.CrystalReports.Engine.Table In SubRpt.Database.Tables
ApplyLogOnInfoToDatabaseTable(CnnInfo, tbl)
Next
End If
Next
Next
End Sub
Private Shared Sub ApplyLogOnInfoToDatabaseTable(ByVal CnnInfo As [Shared].ConnectionInfo, _
ByVal aTable As Engine.Table)
Try
If Not String.IsNullOrEmpty(CnnInfo.DatabaseName) Then
Dim tl As TableLogOnInfo = aTable.LogOnInfo
tl.ConnectionInfo = CnnInfo
aTable.LogOnInfo.ConnectionInfo.Attributes = CreateLogonProperties(CnnInfo.ServerName, CnnInfo.DatabaseName, CnnInfo.IntegratedSecurity)
aTable.ApplyLogOnInfo(tl)
End If
Catch ex As Exception
Throw ex
End Try
End Sub
Private Shared Function CreateLogonProperties(ByVal server As String, ByVal db As String, ByVal integ_sec As Boolean) As DbConnectionAttributes
Dim attrib As New DbConnectionAttributes
attrib.Collection.Add(New NameValuePair2(DbConnectionAttributes.CONNINFO_DATABASE_DLL, "crdb_ado.dll"))
attrib.Collection.Add(New NameValuePair2(DbConnectionAttributes.QE_DATABASE_NAME, db))
attrib.Collection.Add(New NameValuePair2("QE_DatabaseType", "OLE DB (ADO)"))
attrib.Collection.Add(New NameValuePair2(DbConnectionAttributes.QE_LOGON_PROPERTIES, CreateQELogonProperties(server, db, integ_sec)))
attrib.Collection.Add(New NameValuePair2(DbConnectionAttributes.QE_SERVER_DESCRIPTION, server))
attrib.Collection.Add(New NameValuePair2("QE_SQLDB", "True"))
attrib.Collection.Add(New NameValuePair2(DbConnectionAttributes.CONNINFO_SSO_ENABLED, "False"))
Return attrib
End Function
Private Shared Function CreateQELogonProperties(ByVal server As String, ByVal db As String, ByVal integ_sec As Boolean) As DbConnectionAttributes
Dim attrib As New DbConnectionAttributes
attrib.Collection.Add(New NameValuePair2("Connection Timeout", "15"))
attrib.Collection.Add(New NameValuePair2("Data Source", server))
attrib.Collection.Add(New NameValuePair2("General Timeout", "0"))
attrib.Collection.Add(New NameValuePair2("Initial Catalog", db))
attrib.Collection.Add(New NameValuePair2("Integrated Secruity", integ_sec.ToString))
attrib.Collection.Add(New NameValuePair2("Local Identifier", "2057"))
attrib.Collection.Add(New NameValuePair2("OLE DB Services", "-5"))
attrib.Collection.Add(New NameValuePair2("Provider", "SQLOLEDB"))
attrib.Collection.Add(New NameValuePair2("Tag with column collation when possible", "0"))
attrib.Collection.Add(New NameValuePair2("Use DSN Default Properties", "False"))
attrib.Collection.Add(New NameValuePair2("Use Encryption for Data", "0"))
Return attrib
End Function
End Class