在VS2005中运行时更改Crystal Report数据库登录信息






3.40/5 (2投票s)
迁移VS2003代码到VS2005后解决Crystal Report“表未找到”错误消息。
引言
本文解决了在 VS2005 中将旧代码(在 VS2003 中开发)迁移后,导出 Crystal Report 到 PDF/DOC 格式时出现“找不到表”错误消息的问题。
背景
以前在 VS2003 中,table.Location 会报告“DATABASE.dbo.NAME”,并且可以使用此信息更改 Location,但在 vs2005 中 table.Location 仅报告 NAME。
使用代码
部署附件文件,然后将 ReportDocument 作为参数传递给 CReportAuthentication.Impersonate(ReportDocument 对象),从您想要启动报告的位置调用。
Imports System.Configuration Imports CrystalDecisions.CrystalReports.Engine Imports CrystalDecisions.ReportSource Imports CrystalDecisions.Shared Public Class CReportAuthentication Public Shared Sub Impersonate(ByVal myRpt As ReportDocument) ' Set the login info dynamically for the report Dim username As String = ConfigurationManager.AppSettings("ReportUser") Dim password As String = ConfigurationManager.AppSettings("ReportPassword") Dim Server As String = ConfigurationManager.AppSettings("Server") Dim Database As String = ConfigurationManager.AppSettings("Database") Dim logonInfo As New TableLogOnInfo Dim table As Table For Each table In myRpt.Database.Tables logonInfo = table.LogOnInfo logonInfo.ConnectionInfo.ServerName = Server logonInfo.ConnectionInfo.DatabaseName = Database logonInfo.ConnectionInfo.UserID = username logonInfo.ConnectionInfo.Password = password table.ApplyLogOnInfo(logonInfo) 'Previously in VS2003, table.Location would report "DATABASE.dbo.NAME" - 'and it was possible to use this to change the Location, but in vs2005 table. 'Location only reports back the NAME. See below for a fix. 'http://vstoolsforum.com/blogs/crystal_reports/archive/2007/06.aspx table.Location = Database & ".dbo." & table.Name Next table End Sub End Class