OLEDB 串連 和 效率(MS SQL 、Oracle 、ACESS)

來源:互聯網
上載者:User

標籤:

       這半年手頭的一個項目,自己寫代碼的時候偏愛 MS SQL、部署伺服器裝的是 ORALCE 和 實際的現場是小型機,壓根沒有裝資料庫只好選用 ACESS ,三種環境不一致,才決定用 OLEDB 做資料庫訪問。之前忙於趕進度草草地封了幾個增刪改查的操作,年前閑下來做測試還發現了不少問題。趁著這幾天閑就從頭封裝了一次,做出單獨的一個簡單類出來。

為了調用的時候傳遞方便就直接從 IDbCommand 繼承過來,這樣傳參還是調用都留下了餘地,封裝很簡單直接上類圖

本文的小工具和封裝類,已經提交到了GIT

Toater_OSC Git 中的 DataBaseAcess 工程裡

這個版本的封裝提供了倆個簡單的選項

1.是否保持串連

執行命令後是否關閉串連的選項,因為發現在使用 ACESS 的時候如果頻繁開啟關閉檔案,指不定就會遇到 IO導致的錯誤,下面來由一組測試來說明 ACESS 在保持串連的情況下執行效率竟然超過了倆種主流資料庫。

2. 資料庫類型選擇

/// <summary>/// /// <summary>/// 建構函式/// </summary>/// <param name="connectionString">連接字串</param>/// <param name="dbType">資料庫類型</param>/// <param name="keepAlive">是否保持串連</param>public DBFairy(string connectionString, string dbType = DBType_Oracle, bool keepAlive = false){ // 非預設值檢查關鍵字匹配 if (!string.IsNullOrEmpty(dbType)) {  if (DBType_Oracle != dbType && DBType_MSSQL != dbType && DBType_ACCESS != dbType)  {   throw new NotSupportedException("不受支援的類型描述,請使用 DBFairy.DBType 定義.");  }  _DBType = dbType; } _ConnectionString = connectionString; _AlwaysClose = !keepAlive; dbCommand.Connection = new OleDbConnection(_ConnectionString);}

測試了支援選項中的三種資料庫,下面是測試過程。

環境是  :   Acer 台式機 ,I3 CPU ,4G 記憶體

方法是 : 三個後台線程,同時執行 資料庫操作

不過我還是很偏心地把 ACCESS 地調用放在了第一位,實在是因為大家都說小夥子太慢,才愛心地放在了第一位。

bgAcessWorker.RunWorkerAsync();bgMSWorker.RunWorkerAsync();bgOracleWorker.RunWorkerAsync();

在關閉串連的情況下的三次測試:

第一次:  

第二次:

 

第三次:

 

在關閉串連的情況下 : MS SQL 和 Oracle 相差無幾,不過感覺上還是 ORACLE 略快, ACESS 操作時間基本在 2倍以上

問題 : 為毛 ACCESS 執行越來越快了?難道這是檔案 IO 緩衝的問題,或者進程調度優先了檔案?

 

 在保持串連狀態下的三組測試:

第一次 : MSSQL和ORACLE基本還好之前的相差無幾的感覺,不過可以看出來,這裡的時間已經從 17000 減少到了 15000 ,不過在服務型的資料上,開關串連的損失不是很大。

再看一下 ACESS 明顯已經逆天了,直接秒殺了倆位老大。只用了10075 ,10秒左右插入了 1000 條記錄。

第二次:

 第三次:

可能看到同事們紛紛離開工位,回家過年了,電腦也激動地越來越卡了,1000行的執行時間越來越長,不過對比結果還是很明顯的.

ACESS 在保持串連的狀態下,小量資料的插入速度還是很快的,趕超過了 MS SQL 和 ORACLE 。後倆者一直很默契,不離不棄地保持著不分不舍的步調。

(估計是今天情人節的原因吧 ^_^)

----------------------------------------------------------- MARK ----------------------------------------------------------------

 ------ MS SQL 這裡用的附加資料庫 ,VS 2013 內建了 虛擬 SQL的功能<add name="OLEDBConnectionString" connectionString="Provider=SQLNCLI11.1;Data Source=(LocalDB)\V11.0;Persist Security Info=False;Integrated Security=SSPI;Initial File Name=E:\OSChina\Source\Repos\Thenu.TinyHourseLib\THenu.TinyHourseLib\DataBaseAcess\WindowsFormsAcess\App_Data\StudentDB.mdf" providerName="System.Data.OleDb" /> --- ORACL <add name="OracleConnectionString" connectionString="Provider=MSDAORA.1;Data Source=orcl;Persist Security Info=True;Password=hhkj;User ID=hhkj" providerName="System.Data.OleDb" /> --- ACESS<add name="AccessConnectionString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\OSChina\Source\Repos\Thenu.TinyHourseLib\THenu.TinyHourseLib\DataBaseAcess\WindowsFormsAcess\App_Data\Student.mdb" providerName="System.Data.OleDb" />

關於連接字串,大家跟據自己的版本,選擇好  Provider , SQL 2005,2008 和 2012 使用不同的,而且對於服務資料和附加資料庫也有一點區別。Oracle 的常用的就是上面的方式,當然也可以選擇 Oralce 自己的OLEDB Provider

給大家推薦一個很全的連接字串參考網站:

www.connectionstrings.com

問題匯總部分實在來不及寫了, 不要罵我是騙子,著急中午回家洗襪子 就這一雙明天早上還要穿的,這部分年後再補錄吧

今天是情人節外加回家的大日子,作為資深屌絲也是有很多正事要做的  

@MISS BingBing

 

各位OSCer 新年快樂,羊年吉祥,喜洋洋、美羊羊、懶洋洋,我是灰太狼。。。。

OLEDB 串連 和 效率(MS SQL 、Oracle 、ACESS)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.