我们已经研究这个问题好几天了,似乎无法解决它。想知道其他人是否可以提供帮助。我们有一个 .NET 应用程序,它使用:
CrystalDecisions.CrystalReports.Engine 版本:12.0.2000.0
CrystalDecisions.Shared 版本:12.0.2000.0
我们使用系统 DSN 连接到部署应用程序的产品服务器上的 Sql Server。它使用 Sql Server 版本 6.00.6002.18005 作为数据源。它工作得很好。该服务器是 32 位的 Windows Server Enterprise SP2。
当我们将它部署在测试盒上时,它是 Windows Server 2008 R2 64 位。System Dsn Sql Server 版本为 6.01.7601.17514。我安装了更新:
SAP Crystal Reports,Microsoft Visual Studio SP5 的开发人员版本 - MSI(64 位)
然后我们使用: CrystalDecisions.CrystalReports.Engine 版本:13.0.2000.0 CrystalDecisions.Shared 版本:13.0.2000.0
我收到登录错误:CrystalDecisions.CrystalReports.Engine.LogOnException:数据库登录失败。
这是我正在使用的 .Net 代码:
using (ReportDocument rd = new ReportDocument())
{
if (reportType == "Current")
rd.Load(Server.MapPath("~/bin/Reports/MyLoan_MonthlyBillingStatement_CurrentMonth.rpt"));
else
rd.Load(Server.MapPath("~/bin/Reports/MyLoan_MonthlyBillingStatement_History.rpt"));
DataSourceConnections dsc = rd.DataSourceConnections;
IConnectionInfo connInfo = dsc[0];
connInfo.SetLogon("creds here", "creds here");
rd.SetParameterValue("month", month);
rd.SetParameterValue("year", year);
This is where the error hits:
oStream = (MemoryStream)rd.ExportToStream(ExportFormatType.PortableDocFormat);
string filename = string.Format("{0}_{1}.pdf", loanId, reportDate.ToString("m_d_yyyy"));
Response.Buffer = true;
Response.Clear();
Response.AddHeader("content-disposition", "attachment; filename=" + filename);
Response.ContentType = "application/pdf";
Response.BinaryWrite(oStream.ToArray());
oStream.Flush();
oStream.Close();
}
我们已经确认端口是开放的,我们可以telnet到系统dsn中使用的sql server。此外,我们的 Crystal Reports 开发人员使用 Crystal Report 并运行它(独立运行,而不是在 .net 应用程序中),它连接并运行良好。我难住了。我认为这是系统 dsn 中水晶报告 dll 和 sql server 版本的问题。任何帮助将不胜感激。
谢谢!布赖恩