将应用程序从 MDAC 更新到 SQL Server Native Client

SQL Server Native Client 和 Microsoft 数据访问组件 (MDAC 之间存在许多差异;从 Windows Vista 开始,数据访问组件现在称为 Windows 数据访问组件或 Windows DAC) 。 尽管两者都提供对 SQL Server 数据库的本机数据访问,但 SQL Server Native Client 经过专门设计,旨在公开 SQL Server 2005 的新功能,同时保持与早期版本的向后兼容性。

本主题中的信息有助于将 MDAC (或 Windows DAC) 应用程序更新为最新的 SQL Server 2005 中包含的SQL Server Native Client版本。 为了帮助你使此应用程序与 SQL Server 2014 中随附的 SQL Server Native Client 版本保持最新,请参阅从 SQL Server 2005 Native Client 更新应用程序

此外,尽管 MDAC 包含用于 (ADO) 使用 OLE DB、ODBC 和 ActiveX 数据对象的组件,但SQL Server Native Client仅实现 OLE DB 和 ODBC (尽管 ADO 可以访问SQL Server Native Client) 的功能。

SQL Server Native Client和 MDAC 在其他方面有所不同:

  • 与访问 SQL OLE DB 访问接口相比,使用 ADO 访问SQL Server Native Client提供程序的用户可能会发现筛选功能更少。

  • 如果 ADO 应用程序使用SQL Server Native Client并尝试更新计算列,则将报告错误。 对于 MDAC,此更新已接受,但被忽略。

  • SQL Server Native Client是一个独立动态链接库, (DLL) 文件。 公开的接口已经保持为最低限度,这样既是为了减轻分发工作,也是为了降低安全风险。

  • 仅支持 OLE DB 和 ODBC 接口。

  • SQL Server Native Client OLE DB 访问接口和 ODBC 驱动程序名称不同于用于 MDAC 的名称。

  • 使用 SQL Server Native Client 时,可以使用 MDAC 组件提供的用户可访问功能。 这包括但不限于以下功能:连接池、ADO 支持以及客户端游标支持。 使用上述任一功能时,SQL Server Native Client仅提供数据库连接。 MDAC 可提供诸如跟踪、管理控件和性能计数器等功能。

  • 应用程序可以使用具有 SQL Server Native Client 的 OLE DB 核心服务,但如果使用 OLE DB 游标引擎,它们应使用数据类型兼容性选项,以避免由于游标引擎不知道新的 SQL Server 2005 数据类型而可能出现的任何潜在问题。

  • SQL Server Native Client支持访问以前的SQL Server数据库。

  • SQL Server Native Client不包含 XML 集成。 SQL Server Native Client支持 SELECT ...FOR XML 查询,但不支持任何其他 XML 功能。 但是,SQL Server Native Client确实支持 xml SQL Server 2005 中引入的数据类型。

  • SQL Server Native Client支持仅使用连接字符串属性配置客户端网络库。 如果需要更完整的网络库配置,您必须使用 SQL Server 配置管理器。

  • SQL Server Native Client与 odbcbcp.dll 不兼容。 必须重新生成同时使用 ODBC 和 bcp API 的应用程序才能与 sqlncli11.lib 链接,才能使用 SQL Server Native Client。

  • microsoft OLE DB provider for ODBC (MSDASQL) 不支持SQL Server Native Client。 如果将 MDAC SQLODBC 驱动程序与 MSDASQL 或 MDAC SQLODBC 驱动程序与 ADO 配合使用,请在 SQL Server Native Client 中使用 OLE DB。

  • MDAC 连接字符串允许Trusted_Connection关键字 (keyword) 的布尔值 (true) 。 SQL Server Native Client连接字符串必须使用 yes不使用

  • 警告和错误已发生小的改动。 服务器返回的警告和错误现在在传递给SQL Server Native Client时会保留相同的严重性。 如果要依赖于捕获特定的警告和错误,则应当确保已经全面测试了应用程序。

  • SQL Server Native Client具有比 MDAC 更严格的错误检查,这意味着某些不符合 ODBC 和 OLE DB 规范的应用程序的行为可能有所不同。 例如,SQLOLEDB 提供程序没有强制实施结果参数的参数名称必须以“@”开头的规则,但 OLE DB 访问接口SQL Server Native Client。

  • SQL Server Native Client在连接失败方面的行为与 MDAC 不同。 例如,MDAC 返回失败连接的缓存属性值,而SQL Server Native Client向调用应用程序报告错误。

  • SQL Server Native Client不会生成 Visual Studio 分析器事件,而是生成 Windows 跟踪事件。

  • SQL Server Native Client不能与 perfmon 一起使用。 Perfmon 是一种 Windows 工具,它仅可与使用 Windows 附带的 MDAC SQLODBC 驱动程序的 DSN 一起使用。

  • 当 SQL Server Native Client 连接到 SQL Server 2005 及更高版本时,服务器错误 16947 将作为SQL_ERROR返回。 定位更新无法更新行或定位删除无法删除行时,会出现此错误。 当 MDAC 连接到任何版本的 SQL Server 时,服务器错误 16947 会作为警告 (SQL_SUCCESS_WITH_INFO) 返回。

  • SQL Server Native Client实现 IDBDataSourceAdmin 接口,该接口是以前未实现的可选 OLE DB 接口,但只实现此可选接口的 CreateDataSource 方法。 后续版本的 Microsoft SQL Server 将删除该功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

  • SQL Server Native Client OLE DB 访问接口返回 TABLES 和 TABLE_INFO 架构行集中的同义词,TABLE_TYPE设置为 SYNONYM。

  • 数据类型 、、nvarchar(max)xmlvarbinary(max)udt或其他大型对象类型的返回值varchar(max)不能返回到早于 SQL Server 2005 的客户端版本。 如果要将这些类型用作返回值,则必须使用 SQL Server Native Client。

  • MDAC 允许在手动事务和隐式事务开始时执行以下语句,但SQL Server Native Client不允许。 这些语句必须以自动提交模式执行。

    • 所有全文操作(索引和目录 DDL)

    • 所有数据库操作(创建数据库、更改数据库以及删除数据库)

    • 重新配置

    • 关机

    • 终止

    • 备份

  • 当 MDAC 应用程序连接到SQL Server时,SQL Server 2005 中引入的数据类型将显示为与 2000 SQL Server兼容的数据类型,如下表所示。

    SQL Server 2005 类型 SQL Server 2000 类型
    varchar(max) text
    nvarchar(max) ntext
    varbinary(max) image
    udt varbinary
    xml ntext

    此类型映射会影响为列元数据返回的值。 例如,列text的最大大小为 2,147,483,647,但SQL Server Native Client ODBC 将列的最大大小varchar(max)报告为 SQL_SS_LENGTH_UNLIMITED,SQL Server Native Client OLE DB 将列的最大大小varchar(max)报告为 2,147,483,647 或 -1,具体取决于平台。

  • 例如,SQL Server Native Client允许连接字符串中的多义性 (,可能会多次指定一些关键字,并且出于向后兼容性的原因,可能会根据位置或优先级) 的解决方法允许冲突关键字。 SQL Server Native Client的未来版本可能不允许连接字符串中含糊不清。 修改应用程序以使用 SQL Server Native Client 以消除对连接字符串多义性的任何依赖时,这是一种很好的做法。

  • 如果使用 ODBC 或 OLE DB 调用来启动事务,则SQL Server Native Client和 MDAC 的行为存在差异;事务将立即以SQL Server Native Client开始,但事务将在使用 MDAC 进行第一次数据库访问后开始。 这可能会影响存储过程和批处理的行为,因为 SQL Server 要求不管是在批处理或存储过程执行结束后还是在该批处理或存储过程启动时 @@TRANCOUNT 均应相同。

  • 使用 SQL Server Native Client,ITransactionLocal::BeginTransaction 将导致事务立即启动。 如果使用 MDAC,则事务会延迟,直到应用程序已执行要求事务处于隐式事务模式的语句后才启动。 有关详细信息,请参阅 SET IMPLICIT_TRANSACTIONS (Transact-SQL)

  • 将 SQL Server Native Client 驱动程序与 System.Data.Odbc 配合使用来访问公开新的、特定于SQL Server数据类型或功能的SQL Server服务器计算机时,可能会遇到错误。 System.Data.Odbc 提供泛型 ODBC 实现,随后不公开供应商特定的功能或扩展。 (SQL Server Native Client 驱动程序已更新为本机支持最新的SQL Server功能。) 若要解决此问题,可以还原 MDAC 或迁移到 System.Data.SqlClient。

SQL Server Native Client 和 MDAC 都支持使用行版本控制的已提交读取事务隔离,但只有SQL Server Native Client支持快照事务隔离。 (就编程而言,使用行版本控制的已提交读事务隔离等同于已提交读事务。)

另请参阅

使用 SQL Server Native Client 生成应用程序