gpt4 book ai didi

mysql - 将 MySQL 连接字符串动态更改为 Crystal Reports

转载 作者:行者123 更新时间:2023-11-29 00:55:49 25 4
gpt4 key购买 nike

我正在使用 CrystalReportViewerCrystalReportSource 在我的应用程序中加载和显示 .rpt 文件。

我的情况是这样的:

假设某人在我的应用程序之外创建了一个 Crystal Reports 报表并将其数据源设置为数据库。然后我在我的应用程序中使用该 .rpt 文件,但我需要将它绑定(bind)到另一个数据库(在表结构和列名方面与原始数据库相同,但连接字符串以及用户名和密码不同)。

我如何在 VB.NET 代码中做到这一点?

目前我使用以下方式加载报告:

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

最佳答案

我是这样做的。我在 ASP.NET 上将 Oracle 与 ODBC 结合使用,但您应该能够对 MySQL 和 ODBC 进行同样的操作:

作为我一直在进行的遗留应用程序升级的一部分,我决定将 Crystal Reports 移动到 Web 应用程序,而不是让用户通过 Citrix 直接在 Crystal Reports XI 上访问它们,这一直是他们一直采用的方法使用。这有几个优点,主要的一个是速度。困扰我的一个问题是如何在运行时更改登录信息,以便应用程序根据从哪个服务器访问报告自动指向正确的 Oracle 数据库(开发、测试或生产)。

我找到的解决方案是在 ODBC 中将 Oracle 数据库连接设置为 DSN,并连接到 ODBC DSN,而不是直接使用 Oracle 客户端。这不是唯一的方法,但它似乎是实现我的目的的最佳方法。

在包含 Crystal Reports 查看器的页面的代码隐藏文件中,我放置了以下代码来处理呈现查看器的同一事件。

Protected Sub btnGenerate_Click(sender As Object, e As System.EventArgs) Handles btnGenerate.Click
Dim connInfo As New ConnectionInfo
Dim rptDoc As New ReportDocument

' setup the connection
With connInfo
.ServerName = "oracledsn" ' ODBC DSN in quotes, not Oracle server or database name
.DatabaseName = "" ' leave empty string here
.UserID = "username" ' database user ID in quotes
.Password = "password"  'database password in quotes
End With

' load the Crystal Report
rptDoc.Load(Server.MapPath(Utilities.AppSettingsFunction.getValue("ReportFolder") & ddlReports.SelectedValue))

' add required parameters
If pnlstartdates.Visible Then
rptDoc.SetParameterValue("REPORT_DATE", txtSingleDate.Text)
End If

' apply logon information

For Each tbl As CrystalDecisions.CrystalReports.Engine.Table In rptDoc.Database.Tables
Dim repTblLogonInfo As TableLogOnInfo = tbl.LogOnInfo
repTblLogonInfo.ConnectionInfo = connInfo
tbl.ApplyLogOnInfo(repTblLogonInfo)
Next

' Set, bind, and display Crystal Reports Viewer data source
Session("rptDoc") = rptDoc
Me.CrystalReportViewer1.ReportSource = Session("rptDoc")
CrystalReportViewer1.DataBind()
UpdatePanel1.Update()
End Sub

上面的登录信息可以很容易地存储在 web.config 中,而不是像上面那样硬编码。

顺便说一句,我选择将我的 Crystal Reports 查看器放在 ASP.NET AJAX 更新面板中,这就是查看器的 ReportSource 存储在 session 变量中的原因。如果您选择这样做,查看器必须在 Init 事件(而不是 Load 事件)中进行数据绑定(bind)才能正确显示。

Protected Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init
If Not Page.IsPostBack Then
txtSingleDate.Text = Now.Date()
ElseIf Session("rptDoc") IsNot Nothing Then
Me.CrystalReportViewer1.ReportSource = Session("rptDoc")
CrystalReportViewer1.DataBind()
UpdatePanel1.Update()
End If
End Sub

关于mysql - 将 MySQL 连接字符串动态更改为 Crystal Reports,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6212779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com