C#實(shí)現(xiàn)IDbConnection/IDbCommand等相關(guān)通用數(shù)據(jù)接口
關(guān)于數(shù)據(jù)接口
在.net 應(yīng)用中,與數(shù)據(jù)庫(kù)進(jìn)行連接、訪(fǎng)問(wèn)和執(zhí)行經(jīng)常會(huì)用到數(shù)據(jù)接口的相關(guān)對(duì)象,如下:
1、 Connection
表示一個(gè)到數(shù)據(jù)庫(kù)的打開(kāi)的連接,是連接數(shù)據(jù)必不可少的對(duì)象。
2、 Command
命令對(duì)象,表示要對(duì)數(shù)據(jù)源連接執(zhí)行的 SQL 語(yǔ)句或存儲(chǔ)過(guò)程,以獲取返回結(jié)果或執(zhí)行返回值。
3、 DataParameter
用于表示Command命令對(duì)象需要的參數(shù)設(shè)置,雖然這是一個(gè)可選項(xiàng),但在實(shí)際的應(yīng)用中幾乎都會(huì)使用到
ADO.NET 中的數(shù)據(jù)提供者對(duì)象提供了IDbConnection、IDbCommand、IDbDataParameter等通用數(shù)據(jù)接口,本文將利用這些對(duì)象實(shí)現(xiàn)一個(gè)通用方法以訪(fǎng)問(wèn)和操作數(shù)據(jù)庫(kù)內(nèi)容。
對(duì)象執(zhí)行流程
首先需要?jiǎng)?chuàng)建連接對(duì)象,成功后下達(dá)符合對(duì)應(yīng)數(shù)據(jù)庫(kù)規(guī)范的命令指令,該指令可能包括需要的參數(shù)對(duì)象(需要定義名稱(chēng)和賦值等操作),大體流程如下圖:

范例運(yùn)行環(huán)境
操作系統(tǒng): Windows Server 2019 DataCenter
.net版本: .netFramework4.7.1 或以上
開(kāi)發(fā)工具:VS2019 C#
數(shù)據(jù)庫(kù):在這里我們以支持 Oracle 9i、MS SQL Server 2016、國(guó)產(chǎn)達(dá)夢(mèng)數(shù)據(jù) 8 為例
設(shè)計(jì)與實(shí)現(xiàn)
引用
在實(shí)現(xiàn)方法前請(qǐng)引用如下代碼:
using System.Data; using System.Data.SqlClient; using System.Data.OracleClient; using Dm; using System.Collections;
GetConnection方法
GetConnection 方法返回 System.Data.IDbConnection 對(duì)象,其參數(shù)說(shuō)明見(jiàn)下表:
| 序號(hào) | 參數(shù)名 | 類(lèi)型 | 說(shuō)明 |
|---|---|---|---|
| 1 | DbServerType | string | 目前支持 "oracle"、 "dm8",其它字符串均視為 MS SQL Server |
| 2 | ConnectionString | string | 對(duì)應(yīng)數(shù)據(jù)庫(kù)的連接字符串 |
實(shí)現(xiàn)代碼如下:
public System.Data.IDbConnection GetConnection(string DbServerType,string ConnectionString)
{
IDbConnection con = null;
switch (DbServerType.ToLower())
{
case "oracle":
con = new OracleConnection(ConnectionString);break;
case "dm8":
con = new DmConnection(ConnectionString); break;
default:
con = new SqlConnection(ConnectionString); break;
}
return con;
}GetCommand方法
GetCommand 方法返回 System.Data.IDbCommand 對(duì)象,其參數(shù)說(shuō)明見(jiàn)下表:
| 序號(hào) | 參數(shù)名 | 類(lèi)型 | 說(shuō)明 |
|---|---|---|---|
| 1 | dbServerType | string | 目前支持 "oracle"、 "dm8",其它字符串均視為 MS SQL Server |
| 2 | cmdText | string | 要執(zhí)行的SQL語(yǔ)句命令行 |
| 3 | paras | ArrayList | 要賦值的參數(shù)對(duì)象,逐個(gè)添加到ArrayList里,請(qǐng)注意參數(shù)為實(shí)體數(shù)據(jù)參數(shù)對(duì)象,如 MS SQL Server ,請(qǐng)傳遞如下代碼: ArrayList.Add(new SqlParameter("參數(shù)名",參數(shù)值)); |
| 4 | con | IDbConnection | 要傳遞的Connection對(duì)象,可能過(guò)前面所述的GetConnection方法獲取 |
實(shí)現(xiàn)代碼如下:
public IDbCommand GetCommand(string dbservertype,string cmdText,ArrayList paras,IDbConnection con)
{
IDbCommand cmd = null;
switch (dbservertype.ToLower())
{
case "oracle": cmd = new OracleCommand(cmdText,(OracleConnection)con);
break;
case "dm8":
cmd = new DmCommand(cmdText, (DmConnection)con);
break;
default: cmd = new SqlCommand(cmdText,(SqlConnection)con); break;
}
if(paras!=null)
{
for(int i=0;i<paras.Count;i++)
{
cmd.Parameters.Add(GetParameter(dbservertype,paras[i]));
}
}
return cmd;
}請(qǐng)注意,代碼中的 GetParameter 方法我們將后續(xù)做介紹。
GetParameter方法
GetParameter 方法返回 System.Data.IDbDataParameter 對(duì)象,其參數(shù)說(shuō)明見(jiàn)下表:
| 序號(hào) | 參數(shù)名 | 類(lèi)型 | 說(shuō)明 |
|---|---|---|---|
| 1 | dbServerType | string | 目前支持 "oracle"、 "dm8",其它字符串均視為 MS SQL Server |
| 2 | para | object | 傳遞的單一參數(shù)對(duì)象 |
實(shí)現(xiàn)代碼如下:
public System.Data.IDbDataParameter GetParameter(string dbservertype,object para)
{
IDbDataParameter pa = null;
switch (dbservertype.ToLower())
{
case "oracle": pa =(OracleParameter)para;
break;
case "dm8":
para = (DmParameter)pa;
break;
default: para =(SqlParameter)pa;
break;
}
return pa;
}小結(jié)
到此這篇關(guān)于C#實(shí)現(xiàn)IDbConnection/IDbCommand等相關(guān)通用數(shù)據(jù)接口的文章就介紹到這了,更多相關(guān)C#實(shí)現(xiàn)IDbConnection/IDbCommand接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#語(yǔ)法相比其它語(yǔ)言比較獨(dú)特的地方(一)
這篇文章主要介紹了C#語(yǔ)法相比其它語(yǔ)言比較獨(dú)特的地方(一),本文講解了switch語(yǔ)句可以用來(lái)測(cè)試string型的對(duì)象、多維數(shù)組、foreach語(yǔ)句、索引器和Property等內(nèi)容,需要的朋友可以參考下2015-04-04
c#使用listbox的詳細(xì)方法和常見(jiàn)問(wèn)題解決
這篇文章介紹了c#使用listbox的詳細(xì)方法和常見(jiàn)問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01
C# Newtonsoft.Json 解析多嵌套json 進(jìn)行反序列化的實(shí)例
這篇文章主要介紹了C# Newtonsoft.Json 解析多嵌套json 進(jìn)行反序列化的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
C#中的委托數(shù)據(jù)類(lèi)型簡(jiǎn)介
委托是一個(gè)類(lèi)型安全的對(duì)象,它指向程序中另一個(gè)以后會(huì)被調(diào)用的方法(或多個(gè)方法)。通過(guò)本文給大家介紹C#中的委托數(shù)據(jù)類(lèi)型簡(jiǎn)介,對(duì)c委托類(lèi)型相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-03-03
C#中foreach語(yǔ)句使用break暫停遍歷的方法
這篇文章主要介紹了C#中foreach語(yǔ)句使用break暫停遍歷的方法,涉及C#中break語(yǔ)句跳出foreach循環(huán)的使用技巧,非常具有實(shí)用價(jià)值,是C#初學(xué)者必須掌握的重要技巧,需要的朋友可以參考下2015-04-04
C#使用LINQ查詢(xún)操作符實(shí)例代碼(一)
這篇文章介紹了C#使用LINQ查詢(xún)操作符的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
C#使用Win2D在UWP程序中實(shí)現(xiàn)2D繪圖
這篇文章介紹了C#使用Win2D在UWP程序中實(shí)現(xiàn)2D繪圖的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06

