.NET Framework 数据提供程序用于连接到数据库、执行命令和检索结果。您可以直接处理检索到的结果,或将其放入 ADO.NET DataSet 对象,以便与来自多个源的数据或在层之间进行远程处理的数据组合在一起,以特殊方式向用户公开。.NET Framework 数据提供程序是轻量的,它在数据源和代码之间创建了一个最小层,以便在不以功能为代价的前提下提高性能。
下表列出了 .NET Framework 中包含的 .NET Framework 数据提供程序。
|
.NET Framework 数据提供程序
|
说明
|
| SQL Server .NET Framework 数据提供程序 | 提供对 Microsoft SQL Server 7.0 版或更高版本的数据访问。使用 System.Data.SqlClient 命名空间。 |
| OLE DB .NET Framework 数据提供程序 | 适合于使用 OLE DB 公开的数据源。使用 System.Data.OleDb 命名空间。 |
| ODBC .NET Framework 数据提供程序 | 适合于使用 ODBC 公开的数据源。使用 System.Data.Odbc 命名空间。 |
| Oracle .NET Framework 数据提供程序 | 适用于 Oracle 数据源。Oracle .NET Framework 数据提供程序支持 Oracle 客户端软件 8.1.7 版和更高版本,使用 System.Data.OracleClient 命名空间。 |
注意 |
|---|
| .NET Framework 1.0 版中原来并不包含 ODBC .NET Framework 数据提供程序和 Oracle .NET Framework 数据提供程序。如果需要 ODBC .NET Framework 数据提供程序和 Oracle .NET Framework 数据提供程序,并且使用的是 .NET Framework 1.0,可以从 Data Access and Storage Developer Center 上下载这些数据提供程序。下载的 ODBC .NET Framework 数据提供程序的命名空间为 Microsoft.Data.Odbc。下载的 Oracle .NET Framework 数据提供程序的命名空间为 System.Data.OracleClient。 |
.NET Framework 数据提供程序的核心对象
下表概括了组成 .NET Framework 数据提供程序的四个核心对象。
|
对象
|
说明
|
| Connection | 建立与特定数据源的连接。所有 Connection 对象的基类均为 DbConnection 类。 |
| Command | 对数据源执行命令。公开 Parameters,并且可以通过 Connection 在 Transaction 的范围内执行。所有 Command 对象的基类均为 DbCommand 类。 |
| DataReader | 从数据源中读取只进且只读的数据流。所有 DataReader 对象的基类均为 DbDataReader 类。 |
| DataAdapter | 用数据源填充 DataSet 并解析更新。所有 DataAdapter 对象的基类均为 DbDataAdapter 类。 |
除上表列出的核心类之外,.NET Framework 数据提供程序还包含下表列出的类。
|
对象
|
说明
|
| Transaction | 使您能够在数据源的事务中登记命令。所有 Transaction 对象的基类均为 DbTransaction 类。 |
| CommandBuilder | 帮助器对象将自动生成 DataAdapter 的命令属性或将从存储过程派生参数信息并填充 Command 对象的 Parameters 集合。所有 CommandBuilder 对象的基类均为 DbCommandBuilder 类。 |
| ConnectionStringBuilder | 帮助器对象为创建和管理 Connection 对象所使用的连接字符串的内容提供了一种简单的方法。所有 ConnectionStringBuilder 对象的基类均为 DbConnectionStringBuilder 类。 |
| 参数 | 定义命令和存储过程的输入、输出和返回值参数。所有 Parameter 对象的基类均为 DbParameter 类。 |
| Exception | 在数据源中遇到错误时返回。对于在客户端遇到的错误,.NET Framework 数据提供程序会引发 .NET Framework 异常。所有 Exception 对象的基类均为 DbException 类。 |
| Error | 公开数据源返回的警告或错误中的信息。 |
| ClientPermission | 为 .NET Framework 数据提供程序代码访问安全属性而提供。所有 ClientPermission 对象的基类均为 DBDataPermission 类。 |
SQL Server .NET Framework 数据提供程序
SQL Server .NET Framework 数据提供程序使用它自身的协议与 SQL Server 通信。由于它经过了优化,可以直接访问 SQL Server 而不用添加 OLE DB 或开放式数据库连接 (ODBC) 层,因此它是轻量的,并具有良好的性能。下图将 SQL Server .NET Framework 数据提供程序和 OLE DB .NET Framework 数据提供程序进行了对比。OLE DB .NET Framework 数据提供程序通过 OLE DB 服务组件(提供连接池和事务服务)和数据源的 OLE DB 提供程序与 OLE DB 数据源进行通信。
注意 |
|---|
| ODBC .NET Framework 数据提供程序的结构与 OLE DB .NET Framework 数据提供程序的结构相似;例如,它调入 ODBC 服务组件。 |
SQL Server .NET Framework 数据提供程序和 OLE DB .NET Framework 数据提供程序的比较
若要使用 SQL Server .NET Framework 数据提供程序,您必须能够访问 SQL Server 7.0 或更高版本。SQL Server .NET Framework 数据提供程序位于 System.Data.SqlClient 命名空间。对于 SQL Server 的较早版本,请将 OLE DB .NET Framework 数据提供程序与 SQL Server OLE DB 提供程序 (SQLOLEDB) 一起使用。
SQL Server .NET Framework 数据提供程序支持本地事务和分布式事务两者。对于分布式事务,默认情况下,SQL Server .NET Framework 数据提供程序自动登记在事务中,并从 Windows 组件服务或 System.Transactions 获取事务的详细信息。有关更多信息,请参见执行事务。
以下代码示例显示如何在应用程序中包含 System.Data.SqlClient 命名空间。
Imports System.Data.SqlClient
using System.Data.SqlClient;
OLE DB .NET Framework 数据提供程序
OLE DB .NET Framework 数据提供程序通过 COM Interop 使用本机 OLE DB 启用数据访问。OLE DB .NET Framework 数据提供程序支持本地事务和分布式事务两者。对于分布式事务,默认情况下,OLE DB .NET Framework 数据提供程序自动登记在事务中,并从 Windows 2000 组件服务获取事务详细信息。有关更多信息,请参见执行事务。
下表显示已经用 ADO.NET 进行测试的提供程序。
|
驱动程序
|
提供程序
|
| SQLOLEDB | 用于 SQL Server 的 Microsoft OLE DB 提供程序 |
| MSDAORA | 用于 Oracle 的 Microsoft OLE DB 提供程序 |
| Microsoft.Jet.OLEDB.4.0 | 用于 Microsoft Jet 的 OLE DB 提供程序 |
注意 |
|---|
| 不推荐将 Access (Jet) 数据库用作多线程应用程序(如 ASP.NET 应用程序)的数据源。如果必须将 Access 数据库用作 ASP.NET 应用程序的数据源,而且不能使用其他数据库(如 SQL Server 或 MSDE),那么请注意,连接到 Access 数据库的 ASP.NET 应用程序可能会遇到连接问题,这些问题通常与安全权限有关。有关使用 ASP.NET 和 Access 数据库时的连接问题的疑难解答,请参见位于 Microsoft Knowledge Base 的文章 Q316675“PRB: Cannot Connect to Access Database from ASP.NET”(英文)。 |
OLE DB .NET Framework 数据提供程序不支持 OLE DB 2.5 版接口。要求支持 OLE DB 2.5 接口的 OLE DB 提供程序将无法与 OLE DB .NET Framework 数据提供程序一起正常运行。这种 OLE DB 提供程序包括用于 Exchange 的 Microsoft OLE DB 提供程序和用于 Internet 发布的 Microsoft OLE DB 提供程序。
OLE DB .NET Framework 数据提供程序无法与用于 ODBC 的 OLE DB 提供程序 (MSDASQL) 一起使用。要使用 ADO.NET 访问 ODBC 数据源,请使用 ODBC .NET Framework 数据提供程序。
OLE DB .NET Framework 数据提供程序类位于 System.Data.OleDb 命名空间中。以下代码示例显示如何在应用程序中包含 System.Data.OleDb 命名空间。
Imports System.Data.OleDb
ODBC .NET Framework 数据提供程序
ODBC .NET Framework 数据提供程序使用本机 ODBC 驱动程序管理器 (DM) 启用数据访问。ODBC 数据提供程序支持本地事务和分布式事务两者。对于分布式事务,默认情况下,ODBC 数据提供程序自动登记在事务中,并从 Windows 2000 组件服务获取事务的详细信息。有关更多信息,请参见执行事务。
下表显示了用 ADO.NET 测试的 ODBC 驱动程序。
|
驱动程序
|
| SQL Server |
| Microsoft ODBC for Oracle |
| Microsoft Access 驱动程序 (*.mdb) |
ODBC .NET Framework 数据提供程序类位于 System.Data.Odbc 命名空间中。
以下代码示例显示如何在您的应用程序中包含 System.Data.Odbc 命名空间。
Oracle .NET Framework 数据提供程序
Oracle .NET Framework 数据提供程序通过 Oracle 客户端连接软件启用对 Oracle 数据源的数据访问。该数据提供程序支持 Oracle 客户端软件 8.1.7 版或更高版本。该数据提供程序支持本地事务和分布式事务两者。有关更多信息,请参见执行事务。
Oracle .NET Framework 数据提供程序要求必须先在系统上安装 Oracle 客户端软件(8.1.7 版或更高版本),才能连接到 Oracle 数据源。
Oracle .NET Framework 数据提供程序类位于 System.Data.OracleClient 命名空间中,并包含在 System.Data.OracleClient.dll 程序集中。在编译使用该数据提供程序的应用程序时,需要同时引用 System.Data.dll 和 System.Data.OracleClient.dll。
以下代码示例显示如何在您的应用程序中包含 System.Data.OracleClient 命名空间。
Imports System.Data
Imports System.Data.OracleClient
using System.Data;
using System.Data.OracleClient;
选择 .NET Framework 数据提供程序
根据应用程序的设计和数据源,您所选择的 .NET Framework 数据提供程序可以提高应用程序的性能、功能和完整性。下表讨论各个 .NET Framework 数据提供程序的优点和限制。
|
提供程序
|
说明
|
| SQL Server .NET Framework 数据提供程序 | 建议用于使用 Microsoft SQL Server 7.0 或更高版本的中间层应用程序。 建议用于使用 Microsoft 数据库引擎 (MSDE) 或 SQL Server 7.0 或更高版本的单层应用程序。 建议将用于 SQL Server 的 OLE DB 提供程序 (SQLOLEDB) 与 OLE DB .NET Framework 数据提供程序一起使用。 对于 SQL Server 6.5 版和较早版本,必须将用于 SQL Server 的 OLE DB 提供程序与 OLE DB .NET Framework 数据提供程序一起使用。 |
| OLE DB .NET Framework 数据提供程序 | 建议用于使用 SQL Server 6.5 或较早版本的中间层应用程序。 对于 SQL Server 7.0 或更高版本,建议使用 SQL Server .NET Framework 数据提供程序。 还建议用于使用 Microsoft Access 数据库的单层应用程序。不建议将 Access 数据库用于中间层应用程序。 |
| ODBC .NET Framework 数据提供程序 | 建议用于使用 ODBC 数据源的中间层和单层应用程序。 |
| Oracle .NET Framework 数据提供程序 | 建议用于使用 Oracle 数据源的中间层和单层应用程序。 |
请参见