You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OLE DB(ADO)加密SQL Server连接的问题求助

问题解决:Crystal Reports加密连接配置及驱动报错处理

一、Crystal Reports 2016使用Microsoft OLE DB Driver 19报错的解决

报错信息:

Microsoft OLE DB Driver 19 for SQL Server - ADO Error Code 0x80040e73 Format of the initialization string does not conform to the OLE DB specification

解决步骤:

  1. 修正连接字符串格式
    Microsoft OLE DB Driver 19(MSOLEDBSQL)的初始化字符串格式与旧版SQLOLEDB不同,需严格遵循规范。手动配置连接时,确保关键参数正确:

    Provider=MSOLEDBSQL;Data Source=your_server;Initial Catalog=your_db;User ID=your_user;Password=your_pass;Encrypt=yes;TrustServerCertificate=yes;
    

    注意:不要混用旧版参数,比如Use Encryption for Data是SQLOLEDB的参数,MSOLEDBSQL使用Encrypt和TrustServerCertificate。

  2. 确保Crystal Reports驱动兼容性
    Crystal Reports 2016发布时,MSOLEDBSQL 19尚未推出,可能存在兼容性问题。可选择:

    • 降级使用Microsoft OLE DB Driver 18 for SQL Server(更稳定的兼容版本)
    • 若坚持使用MSOLEDBSQL 19,需安装最新的Crystal Reports官方补丁,修复驱动适配问题。
  3. 替代方案:继续使用SQLOLEDB
    既然添加encrypt=1和TrustServerCertificate=1后SQLOLEDB可正常连接,若无需MSOLEDBSQL的新特性,可继续使用该驱动,保持现有配置即可。

二、Visual Studio 2013 Web Viewer配置加密连接

针对现有代码的问题,以下是经过验证的正确配置方式:

方法:通过Property Bag正确配置OLE DB加密参数

修改原有ConnInfo配置部分,使用SQLOLEDB驱动并明确设置加密属性:

With ConnInfo
    .ServerName = lcServer
    .DatabaseName = IIf(ConfigurationSettings.AppSettings("Database") <> "", ConfigurationSettings.AppSettings("Database"), "zzzlive")
    .UserID = wjs.getDBUserName
    .Password = wjs.getDBUserPassword

    ' 构建连接属性包
    Dim connectionProps As New PropertyBag()
    connectionProps.Add("Connect Timeout", "600")
    connectionProps.Add("Data Source", lcServer)
    connectionProps.Add("Initial Catalog", .DatabaseName)
    connectionProps.Add("Integrated Security", False)
    connectionProps.Add("Provider", "SQLOLEDB")
    connectionProps.Add("Use Encryption for Data", "1") ' SQLOLEDB启用加密
    connectionProps.Add("Trust Server Certificate", "1") ' 信任自签名证书

    ' 设置DbConnectionAttributes
    Dim dbAttrs As New DbConnectionAttributes()
    dbAttrs.Collection.Add(New NameValuePair2(DbConnectionAttributes.CONNINFO_DATABASE_DLL, DbConnectionAttributes.DATABASE_DLL_CRDB_ADOPLUS))
    dbAttrs.Collection.Add(New NameValuePair2("QE_DatabaseType", "OLE DB (ADO)"))
    dbAttrs.Collection.Add(New NameValuePair2("QE_LogonProperties", connectionProps))
    dbAttrs.Collection.Add(New NameValuePair2("QE_ServerDescription", lcServer))
    dbAttrs.Collection.Add(New NameValuePair2("QE_SQLDB", "true"))

    .AllowCustomConnection = True
    .Attributes = dbAttrs
    .Type = ConnectionInfoType.CRQE
End With

' 应用到主报表和子报表(原有循环逻辑保留,添加位置刷新)
Dim cntli As TableLogOnInfo
For Each cntable As CrystalDecisions.CrystalReports.Engine.Table In loReport.Database.Tables
    cntli = cntable.LogOnInfo
    cntli.ConnectionInfo = ConnInfo
    cntable.ApplyLogOnInfo(cntli)
    ' 强制更新表位置,确保属性生效
    cntable.Location = .DatabaseName & ".dbo." & cntable.Location.Split(".").Last()
Next

For Each cnsection As Section In loReport.ReportDefinition.Sections
    For Each cnrepobject As ReportObject In cnsection.ReportObjects
        If cnrepobject.Kind = ReportObjectKind.SubreportObject Then
            Dim losubrep As SubreportObject = CType(cnrepobject, SubreportObject)
            Dim subrepdoc As ReportDocument = losubrep.OpenSubreport(losubrep.SubreportName)
            For Each cntable As CrystalDecisions.CrystalReports.Engine.Table In subrepdoc.Database.Tables
                cntli = cntable.LogOnInfo
                cntli.ConnectionInfo = ConnInfo
                cntable.ApplyLogOnInfo(cntli)
                cntable.Location = .DatabaseName & ".dbo." & cntable.Location.Split(".").Last()
            Next
        End If
    Next
Next

关键说明:

  • 对于SQLOLEDB驱动,使用Use Encryption for Data=1和Trust Server Certificate=1参数,而非Encrypt和TrustServerCertificate(后者是MSOLEDBSQL的参数)。
  • 添加cntable.Location的更新,强制Crystal Reports刷新表连接信息,避免属性被忽略。
  • 确保项目引用的Crystal Reports组件版本与VS2013兼容(推荐使用SAP Crystal Reports for Visual Studio 2013 SP21及以上版本,包含加密连接修复)。

内容的提问来源于stack exchange,提问作者Andy Summers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 09:26:01