在開發項目的時候,每每碰到的不一樣的需求狀況,兼容不一樣類型的數據庫是咱們項目以不變應萬變的舉措之一,在底層可以兼容多種數據庫會使得咱們開發不一樣類型的項目駕輕就熟,若是配合快速的框架支持,那更是錦上添花的舉措。我開發的項目或者框架,採用了微軟企業庫Enterprise Library的模塊,傾向於支持多種數據庫,也爲咱們開發不一樣類型的項目提供很是方便、快速、統一的處理方式。通常常規的數據庫包括MS Server、Oracle、MySQL、PostgreSQL、SQLite、DB二、國產達夢等數據庫,本篇隨筆主要介紹如何實現從MS SQLServer到Mysql數據庫,併爲不一樣數據庫類型添加實現底層的解決思路。sql
若是咱們已經基於SQL Server進行了開發,而且具備不少基礎的數據庫數據了,那麼咱們能夠利用SQL Server導出到MySQL數據庫中,這種是咱們常見的一種開發方式,畢竟基於SQLServer數據庫開發起來會比較快速一些。數據庫
SQL Server數據庫的管理工具是SQL Server Management Studio;而Mysql數據庫的管理工具則推薦使用Navicat,這是一款很是強大好用的管理工具。服務器
首先咱們使用Navicat創建本身一個空白的Mysql數據庫,用來承載SQL Server 的數據導出須要。架構
例如咱們建立一個和SQL Server數據庫同名的MVCWebMisTest數據庫,而且設置它的字符集爲默認或者UTF8的編碼方式,以下所示。框架
而後利用SQL Server Management Studio進行數據的直接導出,選擇【任務】【導出數據】,以下所示。工具
而後在彈出的數據庫裏面選擇導入的數據源和目標,選擇導入的數據源界面以下所示。編碼
而後在目標裏面選擇Mysql的驅動,填入相應的信息,以下界面所示。架構設計
而後在下一步選擇須要導出的表信息。設計
很不幸,這種方式操做數據庫的導出操做沒有辦法成功。3d
既然經過SQL Server Management Studio沒法導入數據到Mysql數據庫中,那麼咱們嘗試下Mysql的數據庫管理工具Navicat,它也有數據傳輸(導入導出)的功能。
咱們在剛纔建好的數據庫上面右鍵調出對應的【數據傳輸】功能,而後設置好數據的源和目標,以下所示。
執行數據傳輸操做,順利完成,很是強大和方便,並且沒有任何錯誤。以下界面所示。
檢查數據庫導入的數據表和數據,沒有問題。
那麼若是咱們須要部署到服務器,就須要把當前的Mysql數據庫傳遞(或者還原)到服務器的MySQL數據庫中,通常來說,咱們利用Mysql的Navicat管理工具就能夠實現數據導出的sql文件裏面,而後在服務器裏面使用反向操做便可還原數據庫成功的了。
轉儲SQL文件成功以下界面所示。
而在服務器的上面,咱們能夠利用Navicat的運行SQL文件便可還原Mysql數據庫了。
運行的結果以下所示。
固然有時候也會發現存在一些表依賴引用的狀況發生,不知道是否是Navicat版本出來的問題,不過若是有這個問題,只要不是編碼的問題,都好解決,打開sql文件把建立表的順序調整一下就能夠了,我就碰到過這種極端的狀況,把一些依賴表調整到前面來就能夠順利導入數據了。
底層支持多種數據庫,對咱們開發不一樣類型的項目有着很是重要的支撐做用,咱們不知道客戶具體環境會選擇那種數據庫,若是咱們擴展不一樣的數據庫很是方便和迅速,無疑會給咱們提供很好的控制力和信心。
採用了微軟企業庫Enterprise Library做爲咱們底層的數據庫訪問模塊後,對於多種數據庫的訪問操做,就會統一採用這個企業庫的數據庫訪問對象,操做起來很是一致,爲了對不一樣數據庫的常規增刪改查等一些操做進行進一步的封裝,已達到簡化代碼的目的,所以咱們能夠爲每一個不一樣的數據庫定義一個數據訪問操做基類,以便實現一些不一樣數據庫差別性的處理,可是它們仍是有一個共同的數據訪問基類。
採用不一樣的數據庫,咱們須要爲不一樣數據庫的訪問層進行生成處理,如爲SQLServer數據的表生成相關的數據訪問層DALSQL,裏面放置各個表對象的內容,不過因爲採用了相關的繼承類處理和基於數據庫的代碼生成,須要調整的代碼不多。
咱們爲了避免同的數據庫準備了不一樣的數據庫實現,不過也僅僅是特殊的接口調用而已,通常常規的增刪改查以及分頁等普通接口,所有交由基類接口實現便可。
如對於權限管理系統這個常規框架基礎模塊,多數據庫的支持就很是必要的,它的數據庫訪問層以下所示。
不一樣的數據庫訪問層實現也是相差無幾的,通常能夠利用代碼生成工具進行快速生成後,增長自定義接口實現便可。
而對於不一樣數據庫的支持,直接複製過去,改動一下數據庫實現層的命名空間和訪問層的基類就能夠了,若是有自定義SQL腳本上的差別,能夠適當的修改便可。通常從一種數據庫支持擴展到另一種數據庫支持,無非就是複製過去,進行調整一下便可,很是方便快速,這個就是總體框架支持的魅力和效率所在。
這樣整合多種數據庫支持的底層後,整個數據訪問的架構設計以下所示。
有了這些底層支持,咱們在配置文件選擇不一樣的數據庫的時候,選擇性的保留其中一種數據庫配置信息便可。下面是各類數據庫支持的配置信息參考,通常保留一種便可。