2

嗨,我的任务是将使用 ADOOB 连接的旧程序转换为使用 SqlClient 连接。有什么区别?

4

3 回答 3

5

OleDb 更通用。如果您将来迁移到不同的数据库类型,那么它很有可能会有一个 Ole 驱动程序,而您不必更改那么多代码。

另一方面,正如您所说,Sql Server 原生驱动程序应该更快,并且它具有更好的参数支持(参数可以使用名称并且不必按顺序排列)。

ado 库中存在一些限制以下一些是已知限制

  1. 不支持分层记录集。

  2. 仅 Microsoft SQL Server 数据库支持服务器端游标(FO-RO 游标除外)。

  3. Recordset.Open 方法支持多个以分号分隔的 SQL 语句,但 Connection 和 Command 对象的 Execute 方法不支持。

  4. Oracle 数据库不支持参数化存储过程

  5. Connection 和 Recordset 对象的 Open 方法允许异步执行,但 Connection 和 Command 对象的 Execute 方法不允许。

  6. Recorset 对象的 UpdateBatch 方法要求 SQL 源语句包含所有相关表的键字段,并且不适用于旧语法 JOIN 语句、嵌套 SELECT 语句和派生表。

  7. 用于打开服务器端键集和动态游标的 SELECT 语句必须至少包含一个不可为空的键列。

  8. Move 方法不起作用并引发服务器端动态游标异常。

  9. Recordset 类的 Index、Seek、MarshalOption、StayInSync 成员未实现并被标记为过时。

  10. Recordset 类的 PageSize、Clone 和 Find 成员没有为键集和其他服务器端游标实现。

  11. Command 类的 CommandStream、Dialect、NamedParameters 和 Prepared 成员未实现并被标记为过时。

  12. Stream 类的 ReadText、WriteText 和 SkipLines 方法未实现并被标记为过时。

  13. 不支持 Connection 或 Recordset 对象的一些动态属性。

  14. 不支持 ADODB.Record 类。

部分功能或不支持某些功能

希望能帮助到你

于 2013-05-28T05:38:07.303 回答
2

ADODB 使用较旧的 ADO 库。此代码的存在主要是为了与旧代码兼容,并使旧代码更容易向前移植。它也处于不同的抽象级别。ADODB 定义了一组标准,用于连接到任何数据库类型的对象都可以实现这些标准。SqlClient 特定于 Sql Server。但是,SqlClient 实现了较新的 ADO.Net 提供程序合同。只要有可能,即使在移植旧代码时,也更喜欢 SqlClient 或其他 ADO.Net 提供程序。

于 2013-05-28T05:14:36.603 回答
1

System.Data.SqlClient 命名空间Microsoft ActiveX Data Objects不同,但只要两者都使用 SQL 服务器作为后端,那么查看文档不会让您走上正确的道路。

两者都使用连接并允许“命令”或“记录集”接口,但由于显而易见的原因,前者更紧密地集成到 .Net 中。您可能会发现很多可以删除应用程序中的 VB.Net 代码的实例,因为您将在较新的界面中内置了该功能。

于 2013-05-28T05:20:49.720 回答