MultipleActiveResultSets=true 數據庫連接復用


注:EF連接Mysql時,連接字符串是不能包含MARS的,Mysql不支持這個特性。

 

ADO.NET 1.n 利用SqlDataReader讀取數據,針對每個結果集需要一個獨立的連接。

這些獨立的鏈接也要占用相應的內存,在應用程序運行中還會形成高度擁擠的瓶頸效應。

ADO.NET 2.的一個新特征多數據結果集(Multiple Active Result Sets,簡稱MARS)

它允許在單個連接上執行多重的數據庫查詢或存儲過程。目前只適用於Sql Server 2005

在一個Command對象上同時打開多個DataReader,即可以在sqldatareader里面嵌套sqldatareader,

如果不用MultipleActiveResultSets ,則一般報錯為sqldatareader未關閉,即需要關閉了之后才能打開另一個

使用方法:在數據庫鏈接字符串后面加上MultipleActiveResultSets=true

例如:string connstr = "server=(local);database=northwind;integrated security=true;MultipleActiveResultSets=true";

 

MultipleActiveResultSets可以使數據庫連接復用。這樣就不怕數據庫的連接資源被耗盡了。使用方法很簡單,只需要把它加到數據的連接字符串中即可。

例如:server=(local);Integrated Security = true;database=AdventureWorks;MultipleActiveResultSets=true;

 

using System;  
using System.Threading;  
using System.Data.SqlClient;  
using System.Configuration;  
  
namespace ConsoleApplication1  
{  
    public class Example  
    {  
        public static void Main()  
        {  
        SqlConnection sql1 = new SqlConnection("server=(local);Integrated Security = true;database=AdventureWorks;");  
            sql1.Open();  
            SqlCommand comm1 = new SqlCommand();  
            comm1.CommandText = "select 1";  
            comm1.CommandType = System.Data.CommandType.Text;  
        comm1.Connection = sql1;  
            comm1.ExecuteNonQuery();  
            sql1.Close();  
            Console.ReadLine();  
        }  
    }  
}  

 

編譯后,打開bin/debug/ConsoleApplication1.exe。

在SQL Server 2008 Management Studio中打開一個新窗口,輸入sp_who

按F5執行,可以發現已經有一個用戶連接到AdventureWorks數據庫了。

再打開一個ConsoleApplication1.exe,發現又會多一個用戶連接到AdventureWorks數據庫。

 

現在把程序的連接字符串改為server=(local);Integrated Security = true;database=AdventureWorks;MultipleActiveResultSets=true;

按上面的順序執行,發現不管打開多少個ConsoleApplication1.exe,數據庫中沒有用戶或只有一個用戶連接着AdventureWorks數據庫。

這就是數據庫連接復用的好處了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM