首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 泛型實現資料庫無縫切換:MySQL 轉 SQL Server 實戰

     編輯:關於C#

前言

專案初期採用 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() 取得,單一泛型參數即可,但為減少既有程式碼改動,採雙參數設計。

編譯期切換:using 別名 + 條件編譯

// 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
  • 專案屬性 → Build → Conditional compilation symbols 填入 MYSQL 或 MSSQLSERVER。
  • 其餘業務邏輯完全共用,零程式碼修改。

輔助工具鏈(全免費/開源)

延伸思考

  • 反射方案:執行期動態載入 ADO.NET Provider,更彈性但開發成本較高,視專案規模取捨。
  • 資料庫建模工具:Toad Data Modeler 免費版支援實體模型轉換,極大降低移植成本。
  • 原則:資料存取層依賴介面 (IDbConnection 等) 而非具體類別,是跨 DB 可維護性的關鍵。

小結

泛型 + 條件編譯 + 介面導向設計,讓 C# 專案以極低成本實現資料庫無縫切換,是中小型專案跨平台部署的實用模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
用途工具
IDEVS 2005 Express (C#/C++/Web)
版控SVN + TortoiseSVN
ShellWindows PowerShell
UMLStarUML (支援 C#)
DB 建模Toad Data Modeler Free (內建 DB 轉換)
DB 管理EMS SQL Manager 2005 Lite for MySQL