作者:卿篤軍
原文地址:http://blog.csdn.net/qingdujun/article/details/36425825
SQL Server 2008 + VS2010 用C#編寫的代碼,進行資料庫還原的時候,出錯:
錯誤內容:
在向伺服器發送請求時發生傳輸級錯誤。 (provider: 共用記憶體提供者, error: 0 - 管道的另一端上無任何進程。
解決方案:
將SQL連結語句構造成如下:
string strLink = @"server=.;database=DataBaseName;uid=sa;pwd=123456;pooling=false";
前面的還是一樣的,只是在後面添加一個pooling=false;不使用串連池。
————————————————————————————————————————
分析說明:
其實我們一直在使用SqlServer的串連池。在連接字串中,Pooling為是否啟用串連池,預設值為true,表示啟用。
與串連池相關的兩個重要參數是 Min Pool Size和 Max Pool Size ,分別是池中的最小串連數和池中的最大串連數,預設值分別是0和100。
在我們建立一個串連的執行個體,並調用Open()方法時,串連池管理程式會在串連池中找到一個可用的串連;當調用Close()方法時,串連池管理程式又將串連返回到串連池中,以供下一次調用Open()方法時使用。
另外,連接字串中的 Connection Lifetime 為串連池中的串連設定了生命週期。它的預設值為0。當串連被返回到池時,將其建立時間與目前時間作比較,如果時間長度(以秒為單位)超出了由 Connection Lifetime 指定的值,該串連就會被銷毀。 這在聚集配置中很有用(用於強制執行運行中的伺服器和剛置於聯機狀態的伺服器之間的Server Load Balancer)。零(0)值將使串連池具有最大的連線逾時。
通過上面的瞭解,我們可以看出,即使是最簡單的連接字串,也在使用串連池。
參考文獻:百度知道.在向伺服器發送請求時發生傳輸級錯誤。 (provider: 共用記憶體提供者, error: 0 - 管道的另一端上無任何[CP/OL].http://zhidao.baidu.com/question/1573456795577498260.html,2013-09-27/2014-07-02.
Qi Fei's Blog.Sql Server 串連池及其用法[CP/OL].http://www.cnblogs.com/youring2/archive/2011/06/18/2084442.html,2011-06-18/2014-07-02.