C# Crystal Reports在不同环境中登录失败
我们有几个环境:C# Crystal Reports在不同环境中登录失败,c#,crystal-reports,C#,Crystal Reports,我们有几个环境: 发展 蔚蓝 预先 Crystal报表从SQL server提取数据,但数据库因环境而异 项目中有一个名为connectionStrings.config的配置文件,我们用于网站的连接字符串存储在那里。该文件的内容如下所示: 要加载报告,我设置了以下类: 公共类CrystalReportUtil { 静态字符串ReportsDirectory=ConfigurationManager.AppSettings[“ReportsDirectory”]; 私有静态字符串Conn
- 发展
- 蔚蓝
- 预先
connectionStrings.config
的配置文件,我们用于网站的连接字符串存储在那里。该文件的内容如下所示:
要加载报告,我设置了以下类:
公共类CrystalReportUtil
{
静态字符串ReportsDirectory=ConfigurationManager.AppSettings[“ReportsDirectory”];
私有静态字符串ConnectionString=ConfigurationManager.ConnectionString[“dataModel”]。ConnectionString;
公共静态ReportDocument GetReport(字符串reportName)
{
var报告=新报告文档();
var fileDirectory=$“{Utilities.GetProjectRoot()}/Reports”;
if(System.Web.HttpContext.Current!=null)
{
fileDirectory=System.Web.HttpContext.Current.Server.MapPath(ReportsDirectory);
}
string file=Path.Combine(fileDirectory,$“{reportName}.rpt”);
如果(!File.Exists(File))
{
抛出新的System.Exception($“找不到报告文件:{file}”);
}
报告加载(文件);
var builder=new-SqlConnectionStringBuilder(ConnectionString);
var dataSource=builder.dataSource;
var user=builder.UserID;
var password=builder.password;
var database=builder.InitialCatalog;
递归EmapConnection(报表、用户、密码、数据源、数据库);
report.VerifyDatabase();
返回报告;
}
私有静态void RecursivelyRemapConnection(报表文档报表、字符串用户名、字符串密码、字符串服务器、字符串数据库)
{
foreach(报表中的IConnectionInfo连接。数据源连接)
{
connection.SetLogon(用户名、密码);
SetConnection(服务器、数据库、false);
}
report.SetDatabaseLogon(用户名、密码);
foreach(report.Database.Tables中的表)
{
table.LogOnInfo.ConnectionInfo.ServerName=server;
table.LogOnInfo.ConnectionInfo.DatabaseName=数据库;
table.LogOnInfo.ConnectionInfo.UserID=用户名;
table.LogOnInfo.ConnectionInfo.Password=密码;
table.LogOnInfo.ConnectionInfo.IntegratedSecurity=false;
}
如果(!report.IsSubreport)
{
foreach(report.Subreports中的ReportDocument子报告)
{
递归EmapConnection(子报表、用户名、密码、服务器、数据库);
}
}
}
}
问题是,在我的开发环境中,它工作得很好,而在其他环境中,我得到以下例外:
登录失败。没有错误
在CrystalDecisions.ReportAppServer.ClientDoc.ReportClientDocumentClass.VerifyDatabase()上
在CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.VerifyDatabase()上
在CrystalDecisions.CrystalReports.Engine.ReportDocument.VerifyDatabase()中
我通过执行以下操作验证了我的开发环境中的连接正在更改:
如果我将我的开发环境中的连接字符串更改为Azure或On Prem中使用的连接字符串,它在我的开发环境中仍然有效。我真的不相信问题出在我的连接字符串上,但我也不知道是什么原因导致登录失败。经过几天的研究,我终于找到了问题的原因 失败的特定报告使用的是
MSOLEDBSQL
提供程序,而不是SQLOLEDB
为了解决这个问题,我:
MSOLEDBSQL
更改为SQLOLEDB