C# 泛型操作數(shù)據(jù)庫切換實踐
C# 泛型操作數(shù)據(jù)庫切換實踐的一個項目,最開始選用的是 MySql 5.0 數(shù)據(jù)庫,項目提交之后,對方要求換成 MS SQLServer 2000,還好數(shù)據(jù)層操作基本采用的是標準的SQL語句,也未使用存儲過程,于是將原有的數(shù)據(jù)接入層代碼改寫成泛型類,只改了不到一百行代碼,具體的SQL操作語句一句未動,便實現(xiàn)了數(shù)據(jù)庫之間的切換。下面簡述C#泛型操作數(shù)據(jù)庫切換實踐的具體過程:
數(shù)據(jù)庫不是很復雜,因此我采用了兩個類:
(1) DataProvider 泛型類
- public class DataProvider﹤ConnType, CmdType﹥
- where ConnType : IDbConnection, new()
- where CmdType : IDbCommand,new ()
- {
- }
提供數(shù)據(jù)庫表的Insert,Update,Select,Delete操作。因為 IDbCommand能夠由 IDbConnection 獲取,其實只需要有一個泛型參數(shù)ConnType 的,不過這樣以來,具體的代碼改動比較大,偶就采用了兩個泛型參數(shù)。
(2)ConnectionPool 泛型類
- public class ConnectionPool﹤T﹥
- where T : IDbConnection,new ()
- {
- }
最開始沒在MySql 5.0 中找到對數(shù)據(jù)庫連接池的支持,于是自己寫了一個簡單的數(shù)據(jù)庫連接池。
C# 泛型操作數(shù)據(jù)庫切換的實現(xiàn):
下面,就是采用 C# 的NB語法――using:
(1)如果使用 MySql 數(shù)據(jù)庫:
- using DataProvider =
- DataProvider﹤MySql.Data.MySqlClient.MySqlConnection,
- MySql.Data.MySqlClient.MySqlCommand﹥;
(2)如果使用 SQLServer 數(shù)據(jù)庫:
- using DataProvider =
- DataProvider﹤System.Data.SqlClient.SqlConnection,
- System.Data.SqlClient.SqlCommand﹥;
這樣一來,其它地方的代碼一句都不用動了。
懶惰是程序員的美德。我的一臺電腦上裝的是 SQLServer 2000數(shù)據(jù)庫,一臺電腦上裝的是 MySql數(shù)據(jù)庫,我經(jīng)常一會在這臺電腦上干活,一會在另外一臺電腦上干活,兩個電腦上的代碼應該一致啊。因此,采用預編譯指令:
- #if MSSQLSERVER
- using System.Data.SqlClient;
- using DataProvider = DataProvider﹤System.Data.SqlClient.SqlConnection, System.Data.SqlClient.SqlCommand﹥;
- #elif MYSQL
- using MySql.Data;
- using DataProvider = DataProvider﹤MySql.Data.MySqlClient.MySqlConnection, MySql.Data.MySqlClient.MySqlCommand﹥;
- #endif
這樣在編譯時指定條件編譯符號 " MYSQL " 得到的就是MySql版本的代碼,指定條件編譯符號" MSSQLSERVER ",得到的就是 SQLServer 版本的代碼。
C# 泛型操作數(shù)據(jù)庫切換操作的總結:
(1)理論上來說,采用反射得到的解決方案更完美,不過那樣工期會更長。
(2)數(shù)據(jù)庫設計,偶采用的是免費軟件 Toad Data Modeler 免費版,里面提供了數(shù)據(jù)庫切換功能,切換過去,稍微改動改動。
(3)這次開發(fā)工具采用的全是開源軟件或者免費軟件,都是超級好用的東東,感覺開發(fā)速度并不比龐大的收費軟件慢。用到的工具如下:
IDE:VS 2005 Express (C++版,C#版,Web開發(fā)版),.Net的aspnet命令行編譯工具
版本管理:SVN,小烏龜SVN Client
Shell:Windows Power Shell(這玩意既然出來了,就要充分利用)
UML建模:StarUML(功能強大的開源UML,比偶以前用過的JUDE,ArgoUML強大很多,支持C#)
數(shù)據(jù)庫建模:Toad Data Modeler 免費版
數(shù)據(jù)庫管理工具:EMS SQL Manager 2005 lite for MySQL
C# 泛型操作數(shù)據(jù)庫切換實踐的基本內容就向你介紹到這里,希望對你了解和學習C# 泛型操作數(shù)據(jù)庫切換實踐有所幫助。
【編輯推薦】