运行时无法更改数据库

2020-08-19 00:17发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我们正在将Visual Stud...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我们正在将Visual Studio CRRuntime_32bit_13_0_22的Crystal Reports与Visual Studio 2017和DB2 Windows数据库一起使用。

我们需要在运行时更改数据库连接(服务器,数据库,用户密码)。 我们的应用程序具有示例报告,我们将与我们的应用程序一起分发给客户。

在尝试预览报告时(如果使用WPF查看器,则有任何区别),将引发异常,并显示以下消息:

无法连接:错误的登录参数。

table.ApplyLogOnInfo(table.LogOnInfo);

发生异常

在加载报告时,在预览之前,将执行以下代码来更改连接信息。 我基于以下示例: https://wiki.scn.sap.com/wiki/display/BOBJ/Crystal+Reports+for+.NET+SDK+Samples?original_fqdn=wiki.sdn .sap.com#CrystalReportsfor.NETSDKS示例数据库

我没有使用子报表,因此没有遍历子报表列表。

这是我的代码:

私有void ChangeConnectionInfo(ReportDocument boReportDocument)
  {


 boReportDocument.SetDatabaseLogon(databaseUser,databasePassword,databaseServer,databaseName);


 TableLogOnInfo logOnInfo;
 foreach(boReportDocument.Database.Tables中的CrystalDecisions.CrystalReports.Engine.Table表)
 {
 logOnInfo = table.LogOnInfo;
 logOnInfo.ReportName = boReportDocument.Name;
 logOnInfo.ConnectionInfo.ServerName = databaseServer;
 logOnInfo.ConnectionInfo.DatabaseName = databaseName;
 logOnInfo.ConnectionInfo.UserID = databaseUser;
 logOnInfo.ConnectionInfo.Password = databasePassword;
 logOnInfo.TableName = table.Name;
 如果(schemaName.IsNotNullOrEmpty())
 table.Location = $" {schemaName}。{table.Name}";
 其他
 table.Location = table.Name;


 table.ApplyLogOnInfo(table.LogOnInfo);
 }
 }


 

我在调试时注意到的一件奇怪的事是,即使table.count为6,并且表可以为null,但我可以在调试器中查看整个列表。 我不知道这是问题的征兆还是调试器异常。

任何帮助将不胜感激。

埃里克

7条回答
当学会了学习
2020-08-19 01:13

如果我遍历Tables集合并使用Table.SetTableLocation设置登录信息,则会收到消息异常

文件列表中的错误BillTemplate_MODL 15980_3776_ {0164F666-AD2D-4195-946C-08D5FDA64D7B} .rpt:

无法连接:错误的登录参数。

我只能找到SetTableLocation或SetTableLocationEx方法。

我当前的代码如下。 表代码在注释"//设置新表位置"之后。

我显然错过了一些东西。

谢谢

埃里克。

私有无效ChangeConnectionInfo(ReportDocument boReportDocument)
 {
 {
 CrystalDecisions.ReportAppServer.ClientDoc.ISCDReportClientDocument rptClientDoc = boReportDocument.ReportClientDocument;


//创建一个新的数据库表来替换报表当前表。
 CrystalDecisions.ReportAppServer.DataDefModel.Table boTable = new CrystalDecisions.ReportAppServer.DataDefModel.Table();
 CrystalDecisions.ReportAppServer.DataDefModel.Table subboTable =新的CrystalDecisions.ReportAppServer.DataDefModel.Table();
 CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo newConnInfo =新的CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo();
 CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo oldConnInfo;
 CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfos oldConnInfos;
//CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo boConnectionInfo =新的CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo();


////获取报告的数据库表集合
//CrystalDecisions.ReportAppServer.DataDefModel.Tables boTables;
//boTables = rptClientDoc.DatabaseController.Database.Tables;


//获取旧的连接信息
 oldConnInfos = rptClientDoc.DatabaseController.GetConnectionInfos(null);

//boTable.ConnectionInfo = boConnectionInfo;


 oldConnInfo = oldConnInfos [0];
 CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag logonProperties =
 新的CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag();
 CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag oldlogonProperties =
 新的CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag();


//遍历连接信息并复制到新的连接信息,并在适当时更改参数


//测试一下//
 字符串tmpProperty;
 动态tmpValue;
 for(int i = 0; i  

一周热门 更多>