禁用TLS 1.0和1.1的Visual Studio Apps的CR

2020-08-20 14:03发布

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

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


我们有一个遗留应用程序,该应用程序使用Visual Studio的Crystal报表(13.0.15.1840)。 当他们尝试禁用TLS 1.0登录时失败。 详细信息:[数据库供应商代码:18]文件temp_07f971e7-9796-410b-9351-354114d1f1b9 3588_1120_ {AE34A620-C4CE-41C7-933D-59E0DEE7C0BD} .rpt中的错误:无法连接:错误的登录参数。 详细信息:[CrystalDecisions.ReportAppServer.Controllers.DatabaseControllerClass.SetTableLocation(ISCRTable CurTable,ISCRTable NewTable)的[数据库供应商代码:18]和报表无法访问的服务器上的CrystalDecisions.CrystalReports.Engine.Table.set_Location(String值)和1.1。 连接:

将dll本身升级到Visual Studio的最新Crystal报表并不能解决问题。 我们的怀疑是,我们需要以某种方式将其从使用OLEDB驱动程序更改为更新的MSOLEDBSQL,但是目前尚不清楚如何执行此操作。 我们似乎无法在代码中进行更改。 是否有一条简单的途径可以使这些旧式报告与TLS 1.2一起使用? 谢谢!

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

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


我们有一个遗留应用程序,该应用程序使用Visual Studio的Crystal报表(13.0.15.1840)。 当他们尝试禁用TLS 1.0登录时失败。 详细信息:[数据库供应商代码:18]文件temp_07f971e7-9796-410b-9351-354114d1f1b9 3588_1120_ {AE34A620-C4CE-41C7-933D-59E0DEE7C0BD} .rpt中的错误:无法连接:错误的登录参数。 详细信息:[CrystalDecisions.ReportAppServer.Controllers.DatabaseControllerClass.SetTableLocation(ISCRTable CurTable,ISCRTable NewTable)的[数据库供应商代码:18]和报表无法访问的服务器上的CrystalDecisions.CrystalReports.Engine.Table.set_Location(String值)和1.1。 连接:

将dll本身升级到Visual Studio的最新Crystal报表并不能解决问题。 我们的怀疑是,我们需要以某种方式将其从使用OLEDB驱动程序更改为更新的MSOLEDBSQL,但是目前尚不清楚如何执行此操作。 我们似乎无法在代码中进行更改。 是否有一条简单的途径可以使这些旧式报告与TLS 1.2一起使用? 谢谢!

付费偷看设置
发送
4条回答
DafaDDDa
1楼 · 2020-08-20 14:32.采纳回答
" MSOLEDBSQL"是旧版数据库客户端

感谢相同的P21.。

不确定为什么要在代码中传递旧版OLE dB提供程序吗?

如KBA所述,CR需要更新并使用MS SQL Native 11客户端。

要生成与上面相同的代码,请使用附加到KBA的此应用-

https://launchpad.support.sap.com/#/notes/1553921

使用启用了TLS 2.0的MS SQL Native 11客户端创建新报告。

运行该应用程序并选择新报告,使用它在ReplaceConnection()例程中生成的代码。

软件心理学工程师
2楼-- · 2020-08-20 14:33

"升级dll"是什么意思? 您不仅可以复制文件,还必须以管理员权限登录并安装运行时,因为在安装过程中会设置许多注册表项。

此外, 编写应用程序的SDK和安装的运行时版本应匹配,以使一切正常工作。

-Dell

骆驼绵羊
3楼-- · 2020-08-20 14:25

不 无论选择哪种TLS,都需要对其进行配置并使用支持它的MS和CR支持的运行时。

查看此KBA- https://launchpad.support.sap.com/#/ notes/2269180

2269180-禁用TLS 1.0可能会导致Crystal Reports Designer和.NET应用程序无法连接到您的MS SQL Server数据库2012/2014

我发现确认是否已配置TLS 2.0的最简单方法是创建测试DSN,如果注册表项和客户端配置正确,则CR也将连接。

请注意必须使用CR才能使用的MS SQL Client,CR Designer和VS CR版本。

Don

Doze时光
4楼-- · 2020-08-20 14:46

如果要在运行时从代码更改提供程序,则必须遍历报告中的所有表,并使用替换它们的连接信息 适当的信息(信息的全部)。 以下是样本方法,可用于用新的Microsoft SQL Server连接替换报表中的所有连接:

///<摘要>
        ///使用新的OLEDB连接参数更新给定Crystal Report中包含的所有表
        ///
        /// A <请参见Crystal Report的cref =" CrystalDecisions.CrystalReports.Engine.ReportDocument"/> 
        ///要使用的新服务器(数据源)
        ///要使用的新数据库(初始目录)
        ///新的OLEDB提供程序(请参阅备注)
        ///是否使用受信任的连接
        ///要使用的新用户ID 
        ///新用户的密码
        /// SQL Server OLEDB提供程序的一些有效值(注意:必须安装匹配的供应商组件 
///

///

OLEDBSQL
///
Microsoft SQL Server的旧版OLE DB提供程序
///
SQLNCLI11
///
SQL Native Client v11
///
MSOLEDBSQL
///
用于Microsoft SQL Server的最新OLE DB提供程序(如果在SQL Server上禁用了TLS 1.0/1.1,则使用此提供程序。)
///
内部静态无效ChangeOleDbConnectionInfo(ReportDocument reportDocument,字符串服务器,字符串数据库,字符串oledbProvider,布尔集成安全性,字符串userId,字符串密码) { //boMainPropertyBag:这些保存表ConnectionInfo对象的属性 var boMainPropertyBag = new PropertyBag(); //boInnerPropertyBag:这些保存QE_LogonProperties的属性 //在主属性包(boMainPropertyBag)中 var boInnerPropertyBag = new PropertyBag(); //设置boInnerPropertyBag的属性 boInnerPropertyBag.Add(" Application Intent"," READWRITE"); boInnerPropertyBag.Add("自动翻译"," -1"); boInnerPropertyBag.Add("连接超时"," 15"); boInnerPropertyBag.Add("数据源",服务器); boInnerPropertyBag.Add(" DataTypeCompatibility"," 0"); boInnerPropertyBag.Add("常规超时"," 0"); boInnerPropertyBag.Add("初始目录",数据库); boInnerPropertyBag.Add(" Integrated Security",IntegratedSecurity?" True":" False"); boInnerPropertyBag.Add("语言环境标识符"," 1033"); boInnerPropertyBag.Add(" MARS Connection"," 0"); boInnerPropertyBag.Add(" OLE DB Services"," -5"); boInnerPropertyBag.Add(" Provider",oledbProvider); boInnerPropertyBag.Add("可能时带有列排序规则的标签"," 0"); boInnerPropertyBag.Add("信任服务器证书"," 0"); boInnerPropertyBag.Add("使用DSN默认属性","假"); boInnerPropertyBag.Add("使用数据加密"," 0"); //设置boMainPropertyBag的属性 boMainPropertyBag.Add("数据库DLL"," crdb_ado.dll"); boMainPropertyBag.Add(" QE_DatabaseName",数据库); boMainPropertyBag.Add(" QE_DatabaseType"," OLE DB(ADO)"); //添加我们在boInnerPropertyBag对象中设置的QE_LogonProperties boMainPropertyBag.Add(" QE_LogonProperties",boInnerPropertyBag); boMainPropertyBag.Add(" QE_ServerDescription",服务器); boMainPropertyBag.Add(" QE_SQLDB"," True"); boMainPropertyBag.Add(" SSO Enabled"," False"); //创建一个新的ConnectionInfo对象 var boConnectionInfo =新的CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo { //将数据库属性传递给连接信息对象 属性= boMainPropertyBag, //设置连接种类 种类= CrConnectionInfoKindEnum.crConnectionInfoKindCRQE }; 如果(!integratedSecurity) { boConnectionInfo.UserName = userId; boConnectionInfo.Password =密码; } //获取报告的数据库表集合 CrystalDecisions.ReportAppServer.DataDefModel.Tables boTables; boTables = reportDocument.ReportClientDocument.DatabaseController.Database.Tables; //对于报告中的每个表: //-设置表名称属性。 //-在报表中设置表格位置以使用新的修改后的表格 foreach(boTables中的CrystalDecisions.ReportAppServer.DataDefModel.Table表) { //创建一个新的数据库表来替换报表当前表。 var boTable =新的CrystalDecisions.ReportAppServer.DataDefModel.Table { //将连接信息传递给表 ConnectionInfo = boConnectionInfo, 名称= table.Name, QualifiedName = table.QualifiedName, 别名= table.Alias }; reportDocument.ReportClientDocument.DatabaseController.SetTableLocation(table,boTable); } //在添加新表之后验证数据库。 //确保在添加Command表或存储过程时该表正确更新。 reportDocument.VerifyDatabase(); }

示例调用:

 var reportDocument = new ReportDocument();
 reportDocument.Load(@" C:\ reports \ myreport.rpt");

 ChangeOleDbConnectionInfo(reportDocument," myserver"," mydatabase"," MSOLEDBSQL",false," myuser"," mypass");


 

一周热门 更多>