程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 換一種思維實現數據庫切換

換一種思維實現數據庫切換

編輯:關於ASP.NET

前言

當我們提到設計數據庫無縫切換的時候,經常用到的辦法就是用反射,連微軟自帶的例子Microsoft .NET Pet Shop也是如此。雖然如此,但一方面反射性能比較低,另一方面我覺得通過字符串的方式來切 換數據庫難免不合適。近兩天有想到用標准+冗余的辦法來實現同樣的需求,目前處於理論階段,正在實 踐中,現分享出來大家一起討論下:)

正文

一、理論:

這裡例舉OracleDAL和SqlServerDAL。

將OracleDAL的dll名稱設置為DAL.OracleDAL.dll,將SqlServerDAL名稱設置為DAL.SqlServerDAL.dll ,但是兩者內部的類名、方法名以及命名空氣名稱完全一樣。也就是說,比如class:OracleDAL有一個 Insert方法,那麼就將他的類名稱改成DAL,Insert名稱不變(如果標示了如OracleInsert,最好改成與數 據庫不相關的名稱);而class:SqlServerDAL也同樣將類名改成DAL,外部方法需要和OracleDAL一直。這 樣一來,我們同時引用兩個dll會報錯,我們只能引用一個dll,也就是我們切換數據庫的時候只用替換一 下dll就可以了,不必用反射來了,由此大家也能看到冗余。但是仍然可以優化,理想的情況下,可以抽 出一個中間的dll(DAL.dll)來封裝兩者相同的代碼以及標准接口,而DAL.OracleDAL.dll和 DAL.SqlServerDAL.dll都依賴並遵循於DAL.dll,這樣能規范約束並且減少冗余。

二、實施:

通過反射達到無縫切換:更改數據庫連接字符串+更改表示當前數據庫的配置文件(一般都是如此做法) 。

通過標准+冗余到無縫切換:更改數據庫連接字符串+更換dll。

三、簡單示例:

1.DAL.Oracle.dll

1.1 OracleDAL.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.OracleClient;

using Model;

namespace Data
{
    //public class OracleDAL
    public class DAL
    {
        public void Insert(IModel model)
        {
            OracleCommand cmd = new OracleCommand("connectionstring");
            cmd.CommandText = "Insert into test(column1,column2) values (@column1,@column2)";
            //cmd.Parameters
            cmd.ExecuteNonQuery();
        }
    }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved