ADO.NET-如何选择一个合适的Data Provider

作者:vuefine
文献: msdn library
平台:.NET 2.0+


.NET Framework 数据提供程序用于连接到数据库执行命令检索结果。 将处理后的结果直接放置在 DataSet组件中以便根据需要向用户公开、与多个源中的数据组合,或在层之间进行远程处理。

.NET Framework 的Data Provider是轻量的,它在数据源和代码之间创建最小的分层,并在不降低功能性的情况下提高性能。

.NET框架根据通信机制的不同,一共给出了6种Data Provider。分别适用于SQL Server,OLE DB, ODBC, Oracle, EntityClient, Compact4.0的SQL Server的数据源中的数据访问。它们都有4个核心对象,Connection, Command, DataReader, DataAdapter.

1 用于SQL Server的数据提供程序,用于 .NET Framework 的 SQL Server 数据提供程序 (SqlClient) 使用自己的协议与 SQL Server 进行通信。 它是轻量的且性能良好,因为它进行了优化,可直接访问 SQL Server,而无需添加 OLE DB 或开放式数据库连接 (ODBC) 层。

private static void readOrderData(string connectionStr)
{
    string queryStr = 
        "SELECT orderID, customerID FROM dbo.order;";
    using (SqlConnection connection = new SqlConnection(
               connectionStr))
    {
        SqlCommand command = new SqlCommand(
            queryStr, connection);
        connection.Open();
        SqlDataReader reader = command.ExecuteReader();
        try
        {
            while (reader.Read())
            {
                Console.WriteLine(String.Format("{0}, {1}",
                    reader[0], reader[1]));
            }
        }
        finally
        {
            // Always call Close when done reading.
            reader.Close();
        }
    }
}

2 用于OLE DB的Data Provider 通过 COM 互操作使用本机 OLE DB 来启用数据访问。 用于 OLE DB 的 .NET Framework 数据提供程序支持本地事务和分布式事务。 对于分布式事务,用于 OLE DB 的 .NET Framework 数据提供程序在默认情况下会自动在事务中登记,并从 Windows Component Services 获取事务详细信息。

用于 OLE DB 的 .NET Framework Data Provider 不支持 OLE DB 2.5 版接口。用于 OLE DB 的 .NET Framework Data Provider 不与用于 ODBC 的 OLE DB 访问接口 (MSDASQL) 一起使用。

下面的示例使用 OleDb的Data Provider

public void readData(string connectionStr)
{
    string queryStr = "SELECT OrderID, CustomerID FROM Orders";
    using (OleDbConnection connection = new OleDbConnection(connectionStr))
    {
        OleDbCommand command = new OleDbCommand(queryStr, connection);
        connection.Open();
        OleDbDataReader reader = command.ExecuteReader();

        while (reader.Read())
        {
            Console.WriteLine(reader.GetInt32(0) + ", " + reader.GetString(1));
        }
        // always call Close when done reading.
        reader.Close();
    }
}

3 用于 ODBC 的Data Provider (Odbc) 使用本机 ODBC 驱动程序管理器 (DM) 来启用数据访问。 ODBC Data Provider 支持本地事务和分布式事务两者。 对于分布式事务,ODBC Data Provider 在默认情况下会自动在事务中登记。

OdbcConnection 对象使用本机资源,例如 ODBC 环境和连接句柄。 应该始终显式关闭任何打开 OdbcConnection 对象,或通过将中的连接中 Using 语句。

若要部署高性能应用程序,通常必须使用连接池。 但是,当使用用于 ODBC 的.NET Framework Data Provider,无需启用连接池,因为ODBC会自动管理

static private void InsertRow(string connectionString)
{
    string queryString = 
              "INSERT INTO Customers (CustomerID, CompanyName) Values('NWIND', 'Northwind Traders')";
    OdbcCommand command = new OdbcCommand(queryString);

    using (OdbcConnection connection = new OdbcConnection(connectionString))
    {
        command.Connection = connection;
        connection.Open();
        command.ExecuteNonQuery();

              // The connection is automatically closed at 
              // the end of the Using block.
    }
}

4 用于 Oracle 的 .NET Framework Data Provider
OracleClient 通过 Oracle 客户端连接软件启用对 Oracle 数据源的数据访问。 该数据提供程序支持 Oracle 客户端软件 8.1.7 版或更高版本。 该数据提供程序支持本地事务和分布式事务两者。

用于 Oracle 的 .NET Framework Data Provider 要求系统上安装有 Oracle 客户端软件(8.1.7 版或更高版本),才能连接到 Oracle 数据源。

用于 Oracle 类的 .NET Framework Data Provider 位于 System.Data.OracleClient 命名空间中,并包含在 System.Data.OracleClient.dll 程序集中。 当编译使用该数据提供程序的应用程序时,必须同时引用 System.Data.dll 和 System.Data.OracleClient.dll。

OracleConnection 使用示例:

public void readData(string connectionString)
{
   string queryString = "SELECT EmpNo, EName FROM Emp";
   using (OracleConnection connection = new OracleConnection(connectionString))
   {
      OracleCommand command = new OracleCommand(queryString, connection);
      connection.Open();
      using(OracleDataReader reader = command.ExecuteReader())
      {
      // Always call Read before accessing data.
         while (reader.Read())
         {
            Console.WriteLine(reader.GetInt32(0) + ", " + reader.GetString(1));
         }
      }
   }
}

5 Data Provider的选取指标
根据应用程序的设计和数据源的不同,对 .NET Framework Data Provider的选择可改进应用程序的性能、功能和完整性。 讨论每个 .NET Framework Data Provider的优势和局限性。

Data Provider备注
.NET框架的SQL Server Data Provider建议用于使用 Microsoft SQL Server 的中间层应用程序。建议用于使用 Microsoft 数据库引擎 (MSDE) 或 SQL Server 的单层应用程序。建议将用于 SQL Server 的 OLE DB 访问接口 (SQLOLEDB) 与用于 OLE DB 的 .NET Framework Data Provider一起使用。
用于 OLE DB 的 .NET Framework Data Provider对于 SQL Server,建议使用用于 .NET Framework 的 SQL Server Data Provider而不使用此提供程序。建议用于使用 Microsoft Access 数据库的单层应用程序。 不建议将 Access 数据库用于中间层应用程序。
.NET Framework 用于 ODBC 的Data Provider建议用于使用 ODBC 数据源的中间层应用程序和单层应用程序。
.NET Framework 用于 Oracle 的Data Provider建议用于使用 Oracle 数据源的中间层应用程序和单层应用程序。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值