asp.net中的Crystal Report 2011登录提示
我们使用的是Crystal Reports 2011和SQL Server 2008(Windows 7 64位)。每当我尝试在IIS中部署crystal reports时,它总是提示输入数据库登录信息。我已经尝试了以下选项asp.net中的Crystal Report 2011登录提示,asp.net,sql-server-2008,iis-7,crystal-reports,Asp.net,Sql Server 2008,Iis 7,Crystal Reports,我们使用的是Crystal Reports 2011和SQL Server 2008(Windows 7 64位)。每当我尝试在IIS中部署crystal reports时,它总是提示输入数据库登录信息。我已经尝试了以下选项 在代码中设置登录信息 将IIS应用程序池设置为LocalService 什么都不管用。这是密码 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack)
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ConfigureCrystalReports();
}
else
{
ReportDocument doc = Session["Report"] as ReportDocument;
SetLogon(doc);
CrystalReportViewer1.ReportSource = doc;
CrystalReportViewer1.RefreshReport();
}
}
private void ConfigureCrystalReports()
{
ReportDocument reportDoc;
if (!IsPostBack)
{
reportDoc = new ReportDocument();
reportDoc.Load(Server.MapPath("~/Sample.rpt"));
Session.Add("Report", reportDoc);
}
else
{
reportDoc = Session["Report"] as ReportDocument;
}
SetLogon(reportDoc);
CrystalReportViewer1.ReportSource = reportDoc;
CrystalReportViewer1.RefreshReport();
}
private void SetLogon(ReportDocument reportDoc)
{
var connectionInfo1 = new ConnectionInfo()
{
ServerName = @"ODBCDSN",
DatabaseName = "hrdw_old",
IntegratedSecurity = true
};
SetDBLogonForReport(connectionInfo1, reportDoc);
}
private void SetDBLogonForReport(ConnectionInfo connectionInfo1, ReportDocument reportDocument)
{
Tables tables = reportDocument.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
{
TableLogOnInfo tableLogonInfo = table.LogOnInfo;
tableLogonInfo.ConnectionInfo = connectionInfo1;
tableLogonInfo.ConnectionInfo.Type = ConnectionInfoType.SQL;
table.ApplyLogOnInfo(tableLogonInfo);
}
reportDocument.SetDatabaseLogon(connectionInfo1.UserID, connectionInfo1.Password);
}
}
在IIS中尝试的步骤:
应用程序池:ASP.NET 4.0默认应用程序池
还启用了IIS中的Windows身份验证并禁用了匿名身份验证。
仅尝试匿名身份验证。
SQL Server同时具有windows和SQL Server身份验证
我将无法使用数据集,因为crystal报表将由使用命令对象的人开发。它在VisualStudio2010环境中工作得非常好。但在IIS中不起作用
我缺少一些基本的东西吗?感谢您的帮助
谢谢
Shankar.这是如何解决的。这是一种变通办法
CrystalDecisions.ReportAppServer.ClientDoc.ISCDReportClientDocument rptClientDoc = doc.ReportClientDocument;
CrystalDecisions.ReportAppServer.ClientDoc.ISCDReportClientDocument rcd = rptClientDoc;
string server = @"<SERVER>";
string db = "<DATABASE>";
string user = "<USER>";
string pass = "PASSWORD";
rptClientDoc.DatabaseController.LogonEx(server, db, user, pass);
//Create the logon propertybag for the connection we wish to use
CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag logonDetails = new CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag();
logonDetails.Add("Auto Translate", -1);
logonDetails.Add("Connect Timeout", 15);
logonDetails.Add("Data Source", server);
logonDetails.Add("General Timeout", 0);
logonDetails.Add("Initial Catalog", db);
logonDetails.Add("Integrated Security", "false");
logonDetails.Add("Locale Identifier", 1033);
logonDetails.Add("OLE DB Services", -5);
logonDetails.Add("Provider", "SQLOLEDB");
logonDetails.Add("Use Encryption for Data", 0);
//Create the QE (query engine) propertybag with the provider details and logon property bag.
CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag QE_Details = new CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag();
QE_Details.Add("Database DLL", "crdb_ado.dll");
QE_Details.Add("QE_DatabaseName", db);
QE_Details.Add("QE_DatabaseType", "OLE DB (ADO)");
QE_Details.Add("QE_LogonProperties", logonDetails);
QE_Details.Add("QE_ServerDescription", server);
QE_Details.Add("QE_SQLDB", "True");
QE_Details.Add("SSO Enabled", "False");
CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo newConnInfo = new CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo();
CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo oldConnInfo;
CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfos oldConnInfos;
oldConnInfos = rcd.DatabaseController.GetConnectionInfos(null);
for (int I = 0; I < oldConnInfos.Count; I++)
{
oldConnInfo = oldConnInfos[I];
newConnInfo.Attributes = QE_Details;
newConnInfo.Kind = CrystalDecisions.ReportAppServer.DataDefModel.CrConnectionInfoKindEnum.crConnectionInfoKindCRQE;
try
{
rcd.DatabaseController.ReplaceConnection(oldConnInfo, newConnInfo, null, CrystalDecisions.ReportAppServer.DataDefModel.CrDBOptionsEnum.crDBOptionDoNotVerifyDB);
}
catch (Exception ex)
{
Label1.Text = ex.Message;
return;
}
}
doc.SetDatabaseLogon(user, pass);
CrystalDecisions.ReportAppServer.ClientDoc.ISCDReportClientDocument rptClientDoc=doc.ReportClientDocument;
CrystalDecisions.ReportAppServer.ClientDoc.ISCDReportClientDocument rcd=rptClientDoc;
字符串服务器=@“”;
字符串db=”“;
字符串user=“”;
字符串pass=“PASSWORD”;
rptClientDoc.DatabaseController.LogonEx(服务器、数据库、用户、通行证);
//为我们希望使用的连接创建登录属性Bag
CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag logonDetails=新建CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag();
添加(“自动翻译”,-1);
添加(“连接超时”,15);
添加(“数据源”,服务器);
添加(“常规超时”,0);
添加(“初始目录”,db);
logonDetails.Add(“集成安全”、“假”);
添加(“区域设置标识符”,1033);
添加(“OLE DB服务”,-5);
添加(“提供者”、“SQLOLEDB”);
添加(“对数据使用加密”,0);
//使用提供者详细信息和登录属性包创建QE(查询引擎)属性包。
CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag QE_Details=新的CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag();
添加(“数据库DLL”、“crdb_ado.DLL”);
QE_详情。添加(“QE_数据库名称”,db);
添加(“QE_数据库类型”、“OLE DB(ADO)”;
QE_详情。添加(“QE_LogonProperties”,logonDetails);
添加(“QE_服务器描述”,服务器);
QE_详情。添加(“QE_SQLDB”,“True”);
QE_详细信息。添加(“启用SSO”、“错误”);
CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo newConnInfo=新建CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo();
CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo oldConnInfo;
CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo oldConnInfos;
oldconnfos=rcd.DatabaseController.getConnectionInfo(null);
for(int I=0;I
为了确保根本没有登录提示,首先我必须登录到控制器,然后设置所有登录凭据。请确保在回发期间重新使用登录凭据。完成此操作后,还可以使用reportdocument登录。这解决了登录提示一次又一次出现的问题
谢谢
Shankar设置属性EnableDatabaseLogonCompt=False。