C# 未设置ConnectionInfo设置的Crystal report datsource-未连接到正确的数据库
我有8个报告使用完全相同的代码来设置报告数据源,其中5个报告可以工作,并且能够指向生产环境。其余的3个报告,我已经运行并重新运行了database verify和database update,但当我在生产环境中运行这些报告时,它们会从开发环境中带回数据 下面是如何设置我的数据源的。 我在所有8个crystal报告中调用存储过程。 我已经做了非常详细的调试,并验证了数据源数据是否获得了正确的信息,因此缺少了什么C# 未设置ConnectionInfo设置的Crystal report datsource-未连接到正确的数据库,c#,crystal-reports-2008,C#,Crystal Reports 2008,我有8个报告使用完全相同的代码来设置报告数据源,其中5个报告可以工作,并且能够指向生产环境。其余的3个报告,我已经运行并重新运行了database verify和database update,但当我在生产环境中运行这些报告时,它们会从开发环境中带回数据 下面是如何设置我的数据源的。 我在所有8个crystal报告中调用存储过程。 我已经做了非常详细的调试,并验证了数据源数据是否获得了正确的信息,因此缺少了什么 string database = Configuratio
string database = ConfigurationManager.AppSettings[env + "Database"].ToString();
string server = ConfigurationManager.AppSettings[env + "Server"].ToString();
CrystalReportViewer1.ParameterFieldInfo = fields;
rptDoc.Load(Server.MapPath(report));
ConnectionInfo connectionInfo = Reports.GetConnectionInfo(server, database, "userID", "password");
//connectionInfo.Attributes = attributes;
connectionInfo.Type = ConnectionInfoType.SQL;
SetDBLogonForReport(connectionInfo, env);
CrystalReportViewer1.ReportSource = rptDoc;
private void SetDBLogonForReport(ConnectionInfo oConnectionInfo, string env)
{
try
{
TableLogOnInfos oTableLogOnInfos = CrystalReportViewer1.LogOnInfo;
string[] sparams = new string[]{
};
foreach (CrystalDecisions.CrystalReports.Engine.Table oTable in rptDoc.Database.Tables)
{
if (oTable.LogOnInfo.ConnectionInfo.ServerName == oConnectionInfo.ServerName)
{
TableLogOnInfo oTableLogOnInfo = oTable.LogOnInfo;
oTableLogOnInfo.ConnectionInfo = oConnectionInfo;
oTable.ApplyLogOnInfo(oTableLogOnInfo);
// oTable.Location = String.Format( "{0}.dbo.{1}", oConnectionInfo.DatabaseName, oTable.Name );
bool b = oTable.TestConnectivity();
if (!b)
{
invokeErrorLogger(sparams, env);
}
}
}
}
catch
{
throw;
}
}
有效的报告已指向prod服务器。仅当报表中存储的服务器与您尝试设置的服务器名称匹配时,您才应用登录凭据。更改为:
// Clear existing connection info first
rptDoc.DataSourceConnections.Clear();
foreach (CrystalDecisions.CrystalReports.Engine.Table oTable in rptDoc.Database.Tables)
{
var oTableLogonInfo = oTable.LogonInfo;
oTableLogonInfo.ConnectionInfo = oConnectionInfo;
oTable.ApplyLogOnInfo(oTableLogonInfo);
bool b = oTable.TestConnectivity();
if (!b)
{
invokeErrorLogger(sparams, env);
}
}