專案初期採用 MySQL 5.0,交付時客戶要求改為 SQL Server 2000。幸好資料存取層使用標準 SQL、無預存程序,透過泛型類別封裝,僅修改百行左右程式碼即完成切換,SQL 陳述式零異動。本文分享核心設計。
public class DataProvider<ConnType, CmdType>
where ConnType : IDbConnection, new()
where CmdType : IDbCommand, new()
{
// 提供 Insert、Update、Select、Delete 等通用操作
}
public class ConnectionPool<T>
where T : IDbConnection, new()
{
// 簡易連線池實作
}
雖然 IDbCommand 可由 IDbConnection.CreateCommand() 取得,單一泛型參數即可,但為減少既有程式碼改動,採雙參數設計。
// MySQL 版本
#define MYSQL
#if MYSQL
using MySql.Data.MySqlClient;
using DataProvider = DataProvider<MySqlConnection, MySqlCommand>;
#elif MSSQLSERVER
using System.Data.SqlClient;
using DataProvider = DataProvider<SqlConnection, SqlCommand>;
#endif
MYSQL 或 MSSQLSERVER。| 用途 | 工具 |
|---|---|
| IDE | VS 2005 Express (C#/C++/Web) |
| 版控 | SVN + TortoiseSVN |
| Shell | Windows PowerShell |
| UML | StarUML (支援 C#) |
| DB 建模 | Toad Data Modeler Free (內建 DB 轉換) |
| DB 管理 | EMS SQL Manager 2005 Lite for MySQL |