我在生成Crystal Report的C#程序中有以下方法:
public static ReportDocument CreateCrystalReport(String serverName, String databaseName, Boolean useIntegratedSecurity
, String username, String password, String reportName, Dictionary<String, object> reportParams)
{
try
{
ReportDocument _report = new ReportDocument();
_report.Load(reportName);
// Define a new database connection
ConnectionInfo _connectionInfo = new ConnectionInfo();
_connectionInfo.ServerName = serverName.Trim(new char[] { '\\' });
_connectionInfo.DatabaseName = databaseName;
if (useIntegratedSecurity)
_connectionInfo.IntegratedSecurity = true;
else
{
_connectionInfo.UserID = username;
_connectionInfo.Password = password;
}
// Replace the connection info associated with each table in the report with the updated connection information.
foreach (Table _table in _report.Database.Tables)
{
TableLogOnInfo _logonInfo = _table.LogOnInfo;
_logonInfo.ConnectionInfo = _connectionInfo;
_table.ApplyLogOnInfo(_logonInfo);
}
// add parameters to report
foreach (KeyValuePair<String, object> _param in reportParams)
{
_report.SetParameterValue(_param.Key, _param.Value);
}
return _report;
}
catch (Exception ex)
{
Log.Write(LogLevel.Error, "Error generating Crystal Report: " + ex.Message);
return null;
}
}
我尝试运行的报告是在Crystal Reports中构建/测试的,而不是直接在Visual Studio中构建/测试的。这是必要的,因为我们有可能添加或修改此程序将运行的Crystal Reports的顾问。
为了构建/测试此报告,我连接到我的测试数据库(服务器A)。然后,我将报告复制到另一台测试机器(服务器B),其中C#程序具有不同的SQL服务器数据库和凭据。当我尝试在服务器B上执行报告时,我收到此错误:
然后我在服务器B上打开报告,点击F5运行并修改报告中的连接信息以使其运行。该报告现在从Crystal Reports和服务器B上的C#程序运行。
然后我将报告从服务器B复制到服务器A,当我尝试在服务器A上运行时,我得到与上面相同的错误。
当Crystal Report连接到SQL时,似乎没有使用C#程序提供的连接信息。如果我逐步调试,我可以验证上面代码中的_connectionInfo
是否正在更新,所以我不知道为什么它没有被使用。
设置Crystal Report连接时是否缺少某些登录信息或连接信息?我需要在Crystal Report中做些什么来告诉它使用C#程序中的连接信息吗?