程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#寫一個通用數據訪問組件

C#寫一個通用數據訪問組件

編輯:關於C#
 

我收到過好多Email來問我如何用一個通用的數據提供者(data provider)在不失自然數據提供者(native data provider)穩定而強大功能的前提下來訪問不同的數據源(data sources).一個小伙子甚至問我能不能寫一些代碼在程序運行時指定數據提供者(data provider)。

緒論:

ADO.net對於不同的數據源提供了不同的數據提供者,三個通用的數據提供者分別是OLE DB, SQL, and ODBC。使用不同數據提供者的用意就在於可以針對不同的數據源提供最強大且穩定的數據訪問技術。例如,當你訪問Access數據庫時采用OLE DB data provider這是最有效的方法,但是如果你采用ODBC data provider時,它是建在OLE DB data provider基礎上的,所以效率就會打折扣。

實際上,所有的數據提供者類(data provider classes),比如連接(connection),命令(command),數據適配器(data adapter)和數據讀取者(data reader)都是從某一特定接口繼承的。我希望寫篇文章深入的討論這些,但這要花費我很多天的時間。

總之,我的這篇文章的主要問題是如何寫一個通用的類能夠在運行時根據用戶的選擇而分別采用OLE DB, SQL, and ODBC data providers訪問數據源。

接口模型:

每一種數據提供者都實現了一些接口(interfaces),這些接口都定義在System.Data名字空間(namespace)裡面。例如SqlConnection, OleDbConnection, and OdbcConnection類就是從IdbConnection接口繼承下來的。類似於connection類,其它的ADO.net組件像DataAdapter, DataReader, Command也都是從某個接口繼承下來的。

你們就將使用這些接口來實現通用數據訪問類。我不打算去寫所有的這些功能,但我會給你們如何擴展這些功能提供一個好的想法。

下面的代碼1展現了一個GenericAdoNetComp類,它提供了二個方法,GetConnection 和GetDataAdapter。這兩個方法都是從用戶提供提供的信息關基於connection讀取信息,這二個方法將返回所希望的輸出。下面就是這兩個方法的定義

public IDbConnection GetConnection(int connType, string connString)
public IDbDataAdapter GetDataAdapter(int connType, string connString, string sql)

正如你你所見,我們用IdBConnection取代connection和一個數據提供者相連,方法將返回IdbConnection.從下面的代碼1中你們將看到我們根據用戶在運行時提供的連結種類類型參數(connection type argument)來生成SqlConnection, OleDbConnection, or或者OdbcConnection。

//代碼1

using System;
using System.Data;
using System.Data.Common;
using System.Data.OleDb;
using System.Data.SqlClient;
using Microsoft.Data.Odbc;

namespace GenericDataAccessApp
{
public class GenericAdoNetComp
{
private IDbConnection idbConn = null;
private IDbDataAdapter idbAdapter = null;
private DbDataAdapter dbAdapter = null;
private IDataReader iReader = null;

public GenericAdoNetComp()
{
}

// GetConnection returns IDbConnection
public IDbConnection GetConnection(int connType,
string connString)
{
switch(connType)
{
case 1: // OleDb Data Provider
idbConn = new OleDbConnection(connString);
break;
case 2: // Sql Data Provider
idbConn = new SqlConnection(connString);
break;
case 3: // ODBC Data Provider
idbConn = new OdbcConnection(connString);
break;
// case 3: // Add your custom data provider
default:
break;
}
return idbConn;
}

// GetDataAdapter returns IDbDataAdapter
public IDbDataAdapter GetDataAdapter(int connType,
string connString, string sql)
{
switch(connType)
{
case 1: // OleDb Data Provider
idbAdapter = new OleDbDataAdapter(sql, connString);
break;
case 2: // Sql Data Provider
idbAdapter = new SqlDataAdapter(sql, connString);
break;
case 3: // ODBC Data Provider
idbAdapter = new OdbcDataAdapter(sql, connString);
break;
// case 3: // Add your custom data provider
default:
break;
}
return idbAdapter;
}
}
}

用戶應用程序:

現在,就讓我們來看看如何在windows應用程序裡面使用這個類。為了進行測試,我們創建了一個windows應用程序,在窗體上我們放上三個radio buttons控件,一個button控件,一個Group Box控件和一個DataGrid 控件。

從窗體的部局上我們可以猜的出,此程序可以根據用戶的選擇來確定使用哪種數據提供者。正如你在上圖所看到的,窗體上有三個選項,你可以選擇其一,然後單擊connect按鈕。根據選擇的連接類型,聯結到數據庫關且向DataGrid中填充數據。

在我的應用程序裡面,我定義了下面的變量。

private string connString, sql;
IDbConnection conn = null;
IDbDataAdapter adapter = null;

下面就是connect按鈕的的代碼,在哪裡創建了一個GenericAdoNetCom類的實例,並且調用它的GetConnection 和 GetDataAdapter 方法。一但你提供了一個DataAdapter,你只需簡單的調用Fill和Update方法來讀取和寫入數據。

private void ConnectBtn_Click(object sender, System.EventArgs e)
{
GenericAdoNetComp genDP = new GenericAdoNetComp();
sql = "SELECT * FROM Employees";

if(radioButton1.Checked)
{
connString =
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c://Northwind.mdb";
conn = genDP.GetConnection(1, connString);
adapter = genDP.GetDataAdapter(1, connString, sql);
}
else if (radioButton2.Checked)  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved