当实现 .NET 数据提供程序时,务必要定义以下内容:

本节将为定义 .NET 数据提供程序提供信息和建议。

本节内容

为实现选择接口和类:描述在实现 .NET 数据提供程序时可使用的接口,并说明何时需要实现特定接口。

实现 .NET 数据提供程序之前,应定义将实现哪些 ADO.NET 接口和类。您可能需要实现整组接口(虽然这并不是必需的)。或者,您可能只需实现接口和类的子集,例如仅限于 DataAdapter 的实现,其中客户端主要与 DataSet 进行交互,并且只将 .NET 数据提供程序用作 DataSet 和数据源之间的桥梁。

如果 .NET 数据提供程序将不支持特定的 ADO.NET 类或方法,则将该类或方法实现为无操作。如果客户端需要特定行为,则会引发 NotSupportedException

下表描述可用于实现的接口并说明何时需要特定的接口。

接口 说明 实现说明
IDbConnection 表示与数据源的唯一会话。对于客户端/服务器数据库系统,该会话可能等效于与服务器的网络连接。 对于完整的 .NET 数据提供程序的实现是必需的。
IDbTransaction 表示本地事务。 对于完整的 .NET 数据提供程序的实现是必需的。虽然 IDbTransaction API 在设计上可以支持嵌套事务,但提供程序不必支持嵌套事务。
IDbCommand 表示在连接到数据源时使用的查询或命令。 对于完整的 .NET 数据提供程序的实现是必需的。
IDataParameter 允许用户对一个命令实现某参数并实现该参数到 DataSet 列的映射。 对于完整的 .NET 数据提供程序的实现是必需的。

对于仅限于 IDataAdapter 的实现是可选的。

IDataParameterCollection 允许用户对一个命令实现某参数并实现该参数到 DataSet 列的映射。 对于完整的 .NET 数据提供程序的实现是必需的。
IDataReader 提供从数据源中读取只进、只读数据流的方法。 对于完整的 .NET 数据提供程序的实现是必需的。
IDataAdapter 允许用户实现 DataAdapter,以填充 DataSet 并将 DataSet 中的更改解析回数据源。 对于任何 .NET 数据提供程序实现都是必需的。
IDbDataAdapter 允许用户实现面向关系数据库的 DataAdapter。表示一组命令和一个数据库连接,它们用于填充 DataSet 以及使对 DataSet 的更改与源数据库保持一致。 对于完整的 .NET 数据提供程序的实现是必需的。

.NET 框架还包含 DbDataAdapter 类 ,它提供基本完整的 IDataAdapterIDbDataAdapter 类实现。DbDataAdapter 类可以由任何实现整组 .NET 数据提供程序接口的提供程序来使用。

 

代码约定:描述用于维护所有 .NET 数据提供程序之间的相似性的命名约定和对象构造函数。

若要维持所有 .NET 数据提供程序之间的相似性,请使用以下代码约定。

命名规则

若要维持所有 .NET 数据提供程序之间的一致性,请在 .NET 数据提供程序中实现的类之前添加对于实现唯一的标识符。例如,一个示例 .NET 数据提供程序可能会将“Sample”用作唯一标识符,并将 IDbConnection 实现为“SampleConnection”,将 IDbCommand 实现为“SampleCommand”,将 IDataAdapter 实现为“SampleDataAdapter”,依此类推。

构造函数

虽然这不是实现 ADO.NET 接口所必需的,但为了确保一致的编程模型,应该在每个 .NET 数据提供程序中实现一组标准的构造函数。下表列出了应该在每个 .NET 数据提供程序中实现的构造函数。在所列的构造函数名称中,Prv 是类名称的唯一标识符的占位符。

接口 构造函数
IDbConnection
PrvConnection()
PrvConnection(string connectionString)
IDbTransaction 无。
IDbCommand
PrvCommand()
PrvCommand(string cmdText)
PrvCommand(string cmdText,
           PrvConnection connection)
PrvCommand(string cmdText,
           PrvConnection connection,
           PrvTransaction transaction)
IDataParameter
PrvParameter()
PrvParameter(string name, PrvDbType dataType)
PrvParameter(string name, object value)
PrvParameter(string name, PrvDbType dataType,
             int size)
PrvParameter(string name, PrvDbType dataType,
             int size, string srcColumn)
PrvParameter(string name, PrvDbType dbType,
             int size,
             ParameterDirection direction,
             Boolean isNullable, Byte precision,
             Byte scale, string srcColumn,
             DataRowVersion srcVersion,
             object value)
IDataParameterCollection
PrvParameterCollection()
IDataReader 无。
IDataAdapter
PrvDataAdapter()
PrvDataAdapter(PrvCommand selectCommand)
PrvDataAdapter(string selectCommandText,
               string selectConnectionString)
PrvDataAdapter(string selectCommandText,
               PrvConnection selectConnection)
IDbDataAdapter
PrvDataAdapter()
PrvDataAdapter(PrvCommand selectCommand)
PrvDataAdapter(string selectCommandText,
               string selectConnectionString)
PrvDataAdapter(string selectCommandText,
               PrvConnection selectConnection)

创建 .NET 数据提供程序库:描述如何为 .NET 数据提供程序分配命名空间并将 .NET 数据提供程序编译成库 DLL。

应该将您所创建的每个 .NET 数据提供程序分配到一个唯一的命名空间。该命名空间的确切名称并不重要,但它必须是唯一的,并且不得与其他任何提供程序共享。

实现 .NET 数据提供程序所需的接口在 System.Data 命名空间中提供。此外,System.Data.Common 命名空间还包含一个 DbDataAdapter 实用工具类,它用于实现 .NET 数据提供程序。

以下示例显示用于开始 .NET 数据提供程序的代码,它使用了包含 ADO.NET 接口和任何实用工具类的命名空间。

当编译 .NET 数据提供程序时,由于 System.DataSystem.Data.Common 命名空间包含在 System.Data.dll 中,所以必须向编译器提供对 System.Data.dll 的引用。例如,如果所有包含用于实现 .NET 数据提供程序的代码并且用 Visual Basic .NET 来编写的文件位于扩展名为“.vb”的单个目录中,则将从该目录发出以下命令来编译存储在 CompanyName.ProviderName.dll 中的文件。

vbc /target:library /out:CompanyName.ProviderName.dll *.vb /r:System.dll /r:System.Data.dll

以下代码示例显示将用于扩展名为“.cs”的 C# 文件的命令。

csc /target:library /out:CompanyName.ProviderName.dll *.cs /r:System.dll /r:System.Data.dll