我是Crystal报道的新手。我必须在运行时通过代码设置报告的数据源。我有一个工作代码,但它是非常不可预测的,并提出了许多问题。我只是想知道我做错了什么或者是否有更好的方法来做到这一点。
有时我觉得报告甚至没有使用连接字符串,而是使用独立Crystal应用程序在报告编译时指定的连接。这是真的吗?
Dim connectionInfo As New ConnectionInfo
connectionInfo.ServerName = "UID=abc;PWD=abc;Driver= {SQL Server};Server=" & Page.Request.QueryString("server") & ";Database=" & Page.Request.QueryString("database")
Using report As New ReportDocument
report.Load(Server.MapPath("/report/Crystal/test.rpt"))
report.FileName = Server.MapPath("/report/Crystal/test.rpt")
SetDBLogonForReport(connectionInfo, report)
...
End Using
Private Sub SetDBLogonForReport(ByVal connectionInfo As ConnectionInfo, ByVal reportDocument As ReportDocument)
Dim tables As Tables
tables = reportDocument.Database.Tables
For Each table As CrystalDecisions.CrystalReports.Engine.Table In tables
Dim tableLogonInfo As New TableLogOnInfo
tableLogonInfo = table.LogOnInfo
tableLogonInfo.ConnectionInfo = connectionInfo
table.ApplyLogOnInfo(tableLogonInfo)
Next
End Sub
答案 0 :(得分:2)
这是前一段时间的问题,但我想我会在这里发布回复以防其他人在寻找答案。我只是使用了上面的代码,它运行良好......除了少数例外。
我改变了:
connectionInfo.ServerName = [Entire ConnectionString?]
为:
connection.DatabaseName = [DatabaseName]
connection.UserID = [UserID]
connection.ServerName = [ServerName]
connection.Password = [Password]
此外,不需要将循环中的tableLogonInfo
变量初始化为New TableLogOnInfo
。
我确信,正如上面的评论中提到的那样,有很多例子。我只是想在这里添加一个答案,因为这是我在搜索解决方案时获得的第一个结果。