C#从一个Oracle ODBC迁移到另一个

2020-09-01 19:02发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我已经在很多帮助下获得了ODBC...

         点击此处--->   EasySAP.com群内免费提供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             
3条回答
黑丝骑士
2020-09-01 19:51

上面的代码格式部分(不确认/否定答案只是对喜欢格式化代码的人进行代码更新。)

 oldConnInfos = rptClientDoc.DatabaseController.GetConnectionInfos(null);
 for(int I = 0; I                                                                     

一周热门 更多>