使用ado.net的方式運算元據庫時,對於經常需要操作不同資料庫的同學,需要對不同的資料庫翻來覆去地寫操作類。
對ado.net,運算元據庫需要有幾個核心的東西(以mysql為例):
負責mysql的連線,在操作mysql前,需要先獲得連線。
負責具體命令的類,具體需要執行的sql的語句需要放到它的commandtext下。
對於查詢資料,可以選擇使用dataadapter將資料一次性取出到dataset或者datatable中。
對於查詢資料,同樣可以使用reader類對資料進行讀取,與adapter不同,reader一次取得一條資料,可以在資料獲取的過程中執行**,而不需要等待資料一次性取出。對於mysql有以上的幾個主要類,對於sqlite、sql server,同樣類似。
可以使用乙個類來將他們包裝,然後編譯成dll,這樣如果需要操作不同的資料庫,只需要通過工廠建立不同的類即可。
使用ado.net方式的資料庫驅動,他們都滿足這麼幾個特點:
那麼問題就簡單了,我們只要操作他們的基類就可以了。然後他們的引用通過nuget獲得,這樣就能正常編譯。
//主要**
/// /// 可以根據支援的sql型別增加或刪除型別,需要增加或刪除對應的getconnection和getdbdataadapter方法。
///
public enum sqltype
/// /// 使用ado.net控制對資料庫的基本訪問方法,對同乙個活動物件(不關閉)執行緒安全。
///
public class sqlmanipulation : idisposable
#region private variables
private sqltype _sqltype;
private string _strdsn;
private dbconnection _conn;
private bool _disposed;
#endregion
private dbconnection getconnection()
}private dbdataadapter getdbdataadapter(string sql)
}private dbcommand getcommand(dbconnection conn, string strsql)
/// /// 初始化連線並開啟
///
///
public bool init()
catch (exception e)
}/// /// 執行select查詢語句,並返回datatable物件。
///
/// 需要執行的sql語句
/// datatable物件
public datatable excutequery(string strsql)
catch (exception e)
return dt;
}/// /// 執行非select語句,包括update delete insert
///
/// 需要執行的sql語句
/// 受影響的行數
public int excutenonquery(string strsql)
catch (exception e)
}/// /// 通過事務批量執行非查詢sql語句
///
/// 需要批量執行的sql
/// 受影響的行數,發生回滾則返回-1
public int executenonquerytransaction(liststrsqls)
transaction.commit();
return sumaffected;
}catch (exception e)
}}
(現在已經對mysql、sql server、posgresql、sqlite和odbc方式支援)
**重構
資料庫現在是持續保持開啟,擬增加其他選項
程式比較簡單,**放在github上,歡迎交流。
c 操作mysql通用類 C 資料庫操作通用類
usingsystem usingsystem.collections.generic usingsystem.linq usingsystem.text usingsystem.data.common usingsystem.data usingsystem.reflection namespac...
C 資料庫SQL操作通用類
剛學c 自己寫了乙個資料庫操作的通用類,以做復用。寫得不好,不斷更新中。1 using system 2 using system.data 3 using system.data.sqlclient 4 5 6 namespace qxtintface7 18 catch exception ex...
C SQL資料庫操作通用類
c sql資料庫操作通用類 using system using system.configuration using system.data using system.data.sqlclient using system.collections namespace framework.datab...