使用C 打造通用的資料庫連線類

2021-06-03 12:02:48 字數 4684 閱讀 1848

眾所周知vs.net提供了sqlserver、oledb、odbc等幾種資料庫連線驅動,現在比較常見的資料庫連線類(如dbhelper等)只提供了其中一種連線方式,在我們開發的專案要更換資料庫時或者在乙個專案中要涉及多個不同型別的資料庫時是非常麻煩的,通常要更改幾乎所有的資料庫連線相關**。在經過幾次痛苦之後,我決定打造乙個通用的資料庫連線類。

在查閱了相關資料之後我決定使用接**術和.net最新提供的通用資料庫物件和配置檔案來實現。關於使用接**術,在查閱了msdn文件之後我們得知.net中各種資料庫連線類( system.data.sqlclient.sqlconnection、system.data.oledb.oledbconnection 等)都是從system.data.idbconnection介面派生的,資料庫連線類中的常用方法如開啟連線open()方法、得到command物件的createcommand()方法、和資料庫事務相關的begintransaction()方法、commit()方法、rollback()方法等在system.data.idbconnection介面中已經有定義。各種驅動型別的datarader類也都是從system.data.idatareader介面派生的,datarader的一些常用方法在介面中也都存在定義。

考慮到開發的靈活性,我們將資料庫連線資訊寫在配置檔案中,內容格式如下:

接下來再來考慮連線類的寫法,考慮到乙個專案中涉及到多個資料庫情況,開啟資料庫連線的方法如下

///

/// 開啟資料庫連線

///

/// 連線名

///

static public system.data.common.dbconnection openconnect(string connname)

//openconnect(string connname)

openconnect方法需要傳遞連線名引數,這個引數是的值要與配置檔案中的值匹配。通過呼叫openconnect方法,我們在同乙個專案中可以隨時開啟多個不同的連線

得到了連線之後,接下來要解決查詢的問題,為了通用性我們將連線物件作為引數傳遞。

///

/// 執行查詢返回datareader

///

/// sql語句

/// 連線物件

/// 成功時返回reader物件,失敗時返回null

static public system.data.idatareader executequery(string sql, system.data.common.dbconnection conn)

trysystem.data.idbcommand cmd = conn.createcommand();

cmd.commandtext = sql;

reader = cmd.executereader();

return reader;

}catch (exception ex)

下面是增刪改的方法:

///

/// 執行sql語句

///

/// sql語句

///資料庫連線物件

/// 返回受影響行數

static public int execute(string sql, system.data.common.dbconnection conn)

system.data.idbcommand cmd = conn.createcommand();

cmd.commandtext = sql;

trycatch (exception ex)

}為了方便向資料庫新增二進位制資料,再寫乙個帶引數的增刪改方法:

///

/// 執行sql語句?

///

/// sql語句

/// 資料庫連線物件

/// 引數

/// 返回受影響行數

static public int execute(string sql, system.data.common.dbconnection conn, system.data.common.dbparameter param)

system.data.idbcommand cmd = conn.createcommand();

cmd.commandtext = sql;

for (int i = 0; i < param.length; i++)

trycatch (exception ex)

}到這裡就差不多了,下面附上完整**:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.io;

namespace common

///

/// 得到連線字串

///

/// 連線字串

static private string getconnstring(string key)

return connstr;

}///

/// 開啟資料庫連線

///

/// 連線名

///

static public system.data.common.dbconnection openconnect(string connname)

//openconnect(string connname)

///

/// 執行查詢返回datatable

///

/// sql語句

/// 成功返回datatable,失敗則返回 null

static public system.data.datatable executequerytodatatable(string sql, system.data.common.dbconnection conn)

//executequerytodatatable(string sql)

///

/// 執行查詢返回datareader

///

/// sql語句

/// 連線物件

/// 成功時返回reader物件,失敗時返回null

static public system.data.idatareader executequery(string sql, system.data.common.dbconnection conn)

trysystem.data.idbcommand cmd = conn.createcommand();

cmd.commandtext = sql;

reader = cmd.executereader();

return reader;

}catch (exception ex)

}//executequery(string sql)

///

/// 執行sql語句

///

/// sql語句

/// 資料庫連線物件

/// 返回受影響行數

static public int execute(string sql, system.data.common.dbconnection conn)

system.data.idbcommand cmd = conn.createcommand();

cmd.commandtext = sql;

trycatch (exception ex)

}//execute(string sql)

///

/// 執行sql語句

///

/// sql語句

/// 資料庫連線物件

/// 引數

/// 返回受影響行數

static public int execute(string sql, system.data.common.dbconnection conn, system.data.common.dbparameter param)

system.data.idbcommand cmd = conn.createcommand();

cmd.commandtext = sql;

for (int i = 0; i < param.length; i++)

trycatch (exception ex)

}//execute(string sql,system.data.idataparameter param)

///

/// 執行乙個事務

///

/// sql語句組

/// 成功時返回true

static public bool executetrans(string sqls, system.data.common.dbconnection conn)

system.data.idbcommand cmd = conn.createcommand();

mytrans = conn.begintransaction();

cmd.transaction = mytrans;

try}

mytrans.commit();

}catch (exception ex)

return true;

}//execute(string sql)

///

/// 記錄錯誤資訊

///

/// 錯誤資訊}}

c 連線mysql 通用類 資料庫通用連線類

usingsystem usingsystem.data usingsystem.data.sqlclient namespacedataproviders sqldataprovider 的摘要說明。internal classsqldataprovider idataprovider priva...

C 類庫 OTL通用的資料庫連線類庫

from otl是乙個純c 的通用資料庫連線模板庫,可以支援各種當下流行的資料庫,如oracle,sybase,mysql,postgresql,enterprisedb,sqlite,ms access,firebird等等.它是乙個跨平台類庫,在ms windows,linux unix mac...

c 通用資料庫訪問類

在應用程式的設計中,資料庫的訪問是非常重要的,我們通常需要將對資料庫的訪問集中起來,以保證良好的封裝性和可維護性。在.net中,資料庫的訪問,對於微軟自家的sqlserver和其他資料庫 支援oledb 採用不同的訪問方法,這些類分別分布於system.data.sqlclient和system.d...