点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我已经在很多帮助下获得了ODBC的更新,以使基于SQL Server的报表能够正常工作,但是现在我试图弄清楚Oracle DB的状况,因为它对我不起作用。 似乎在" VerifyDatabase"处失败,据我了解可能会导致问题。 我确实删除了该行并进行了测试,这使连接的别名留为空白,这远不理想。
请帮助我弄清楚如何修复代码,以便可以同时将其用于Oracle和SQL Server。
ReportDocument rpt = new ReportDocument(); rpt.Load(rptSourceURL); ISCDReportClientDocument rptClientDoc = rpt.ReportClientDocument; //为两个现有参数值设置参数值。 //rpt.SetParameterValue(" servProvCode"," ab"); //rpt.SetParameterValue(" servProvCode2"," cd"); 如果(rpt.ReportClientDocument.DataDefController.DataDefinition.ParameterFields.Count> 0) { foreach(rptClientDoc.DataDefController.DataDefinition.ParameterFields中的CrystalDecisions.ReportAppServer.DataDefModel.ParameterField参数字段) { //MessageBox.Show(paramfield.Type.ToString()); 如果(paramfield.Type.ToString()==" crFieldValueTypeStringField") { rpt.SetParameterValue(paramfield.Name," ABC"); } 否则,如果(paramfield.Type.ToString()==" crFieldValueTypeDateField") { rpt.SetParameterValue(paramfield.Name," 01/01/2000"); } 其他 { rpt.SetParameterValue(paramfield.Name," 123"); } } } //创建一个新的命令表来替换报告当前表。 CrystalDecisions.ReportAppServer.DataDefModel.CommandTable boTable =新的CrystalDecisions.ReportAppServer.DataDefModel.CommandTable(); //获取报告的数据库表集合 CrystalDecisions.ReportAppServer.DataDefModel.Tables boTables; boTables = rptClientDoc.DatabaseController.Database.Tables; //设置新的属性包值,如果没有更改但仍然保留,则可能不需要 //boMainPropertyBag:这些保存表ConnectionInfo对象的属性 PropertyBag boMainPropertyBag =新的PropertyBag(); //boInnerPropertyBag:这些保存QE_LogonProperties的属性 //在主属性包(boMainPropertyBag)中 PropertyBag boInnerPropertyBag =新的PropertyBag(); //设置boInnerPropertyBag的属性 boInnerPropertyBag.Add(" DSN",rptODBC); boInnerPropertyBag.Add(" Database",rptDatabase); boInnerPropertyBag.Add(" User ID",rptUser); //boInnerPropertyBag.Add(" UseDSNProperties"," False"); boInnerPropertyBag.Add("使用DSN默认属性","假"); boInnerPropertyBag.Add("数据源名称",rptODBC); //设置boMainPropertyBag的属性 boMainPropertyBag.Add("数据库DLL"," crdb_odbc.dll"); boMainPropertyBag.Add(" DSN",rptODBC); boMainPropertyBag.Add(" QE_ServerDescription",rptODBC); boMainPropertyBag.Add("数据源名称",rptODBC); boMainPropertyBag.Add(" QE_DataSourceName",rptODBC); boMainPropertyBag.Add(" QE_DatabaseName",rptDatabase); boMainPropertyBag.Add(" QE_DatabaseType"," ODBC(RDO)"); //添加我们在boInnerPropertyBag对象中设置的QE_LogonProperties boMainPropertyBag.Add(" QE_LogonProperties",boInnerPropertyBag); boMainPropertyBag.Add(" QE_SQLDB"," True"); boMainPropertyBag.Add(" SSO Enabled"," False"); //创建一个新的ConnectionInfo对象 CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo boConnectionInfo =新的CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo(); //将数据库属性传递给连接信息对象 boConnectionInfo.Attributes = boMainPropertyBag; //设置连接种类 boConnectionInfo.Kind = CrConnectionInfoKindEnum.crConnectionInfoKindCRQE; //**编辑**如果需要,设置用户名和密码。 boConnectionInfo.UserName = rptUser; boConnectionInfo.Password = rptPassword; //============================================ //更新"主要报告"表 //============================================ for(int k = 0; k
是基于Oracle的报表还是SQL Server? 同时更改和修改Command SQL可能导致各种集合彼此不同步。
由于MS SQL和Oracle之间的SQL完全不同,因此您应该首先使用ReplaceConnection()。 然后在下一步中更改命令。 您可能需要先将报告另存为临时报告。
我们一直在将MS SQL报告转换为代码形式的Oracle时遇到问题。 最好使用基于Oracle的报表,然后简单地更新Command SQL。
使用它来提交更改,并且除非您需要,否则不要验证数据库,这确实会在出现问题时引起问题。 使用ReplaceConnection()。 表格必须完全匹配,因为CR在RTP文件中保留了表格结构的副本,验证DB只会混淆集合:
上面的代码格式部分(不确认/否定答案只是对喜欢格式化代码的人进行代码更新。)
FYI crDBOptionDoNotVerifyDB也是应用程序和web.config文件的属性,用于全局设置。
一周热门 更多>