gpt4 book ai didi

c# - 使用 ODBC 连接在代码隐藏中加载 Crystal Report

转载 作者:太空宇宙 更新时间:2023-11-03 13:03:52 26 4
gpt4 key购买 nike

我有一组当前代码可以通过服务器连接在 C# 中加载 Crystal Report。

这是加载报告的代码:

CrystalReportViewer1.ParameterFieldInfo.Clear();
string reportName = Request.QueryString["rpt"];
if (reportName != null)
{
crystalReport = new ReportDocument();
crystalReport.Load(@"\\esco-iis\crystalreports\purchasing\po.rpt");
//crystalReport.Load(@"\\esco\crystalreports\purchasing\po.rpt");

var connectionInfo = new ConnectionInfo();
connectionInfo.ServerName = "server";
connectionInfo.DatabaseName = "database";
connectionInfo.Password = "pass";
connectionInfo.UserID = "user";
connectionInfo.IntegratedSecurity = false;
crystalReport.SetDatabaseLogon("user", "pass", "server", "database");
Tables CrTables = crystalReport.Database.Tables;
TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
{
crtableLogoninfo = CrTable.LogOnInfo;
crtableLogoninfo.ConnectionInfo = connectionInfo;
CrTable.ApplyLogOnInfo(crtableLogoninfo);
CrystalReportViewer1.LogOnInfo.Add(crtableLogoninfo);

}

foreach (ReportDocument report in crystalReport.Subreports)
{
report.SetDatabaseLogon("user", "pass", "server", "database");
foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in report.Database.Tables)
{
crtableLogoninfo = CrTable.LogOnInfo;
crtableLogoninfo.ConnectionInfo = connectionInfo;
CrTable.ApplyLogOnInfo(crtableLogoninfo);
CrystalReportViewer1.LogOnInfo.Add(crtableLogoninfo);
}
}

string PO = Request.QueryString["PO"];
if (PO != null)
{
ParameterField parameter = new ParameterField();
ParameterDiscreteValue parameterValue = new ParameterDiscreteValue();
parameterValue.Value = PO;
parameter.Name = "@PO";
parameter.CurrentValues.Add(parameterValue);
CrystalReportViewer1.ParameterFieldInfo.Add(parameter);
}
}

当前状态:当报表设置为直接连接到数据库时,这会起作用,但其中大约一半设置为使用 ODBC 连接。

尝试:我试图将服务器名称切换为 ODBC 连接的名称,但这仍然返回相同的 Failed to open the connection。无法打开连接。 错误。

问题: 我似乎无法弄清楚我可以在我的 ConnectionInfo 中进行哪些更改才能使其成功使用 ODBC 连接。我一直收到 Failed to open the connection。无法打开连接。

我知道单独进行连接并设置报告源的解决方案,但这不可行,因为有很多报告。

提前致谢!

最佳答案

在运行时设置 ODBC 连接是 rather tricky ,主要是因为需要设置所有这些额外的“登录属性”和“连接属性”:

// DbConnectionAttributes contains some, but not all, consts.
var logonProperties = new DbConnectionAttributes();
logonProperties.Collection.Set("Connection String", @"Driver={SQL Server};Server=TODD-PC\SQLEXPRESS2;Trusted_Connection=Yes;");
logonProperties.Collection.Set("UseDSNProperties", false);

var connectionAttributes = new DbConnectionAttributes();
connectionAttributes.Collection.Set("Database DLL", "crdb_odbc.dll");
connectionAttributes.Collection.Set("QE_DatabaseName", String.Empty);
connectionAttributes.Collection.Set("QE_DatabaseType", "ODBC (RDO)");
connectionAttributes.Collection.Set("QE_LogonProperties", logonProperties);
connectionAttributes.Collection.Set("QE_ServerDescription", @"TODD-PC\SQLEXPRESS2");
connectionAttributes.Collection.Set("QE_SQLDB", true);
connectionAttributes.Collection.Set("SSO Enabled", false);

return new ConnectionInfo
{
Attributes = connectionAttributes,
// These don't seem necessary, but we'll include them anyway: ReportDocument.Load does
ServerName = @"TODD-PC\SQLEXPRESS2",
Type = ConnectionInfoType.CRQE
};

另一方面,与其从头开始创建 ConnectionInfo 对象,不如使用现有的对象,特别是如果您已经使用类似的连接设计了报表:

foreach (Table crTable in crTables)
{
TableLogOnInfo tableLogOnInfo = crTable.LogOnInfo;
var connectionInfo = tableLogOnInfo.ConnectionInfo;

// set connection info stuff here

crTable.ApplyLogOnInfo(tableLogOnInfo);
}

关于c# - 使用 ODBC 连接在代码隐藏中加载 Crystal Report,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31455180/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com