2010-09-28 71 views
9

我有一個應用程序,它使用SqlConnection.ClearAllPools關閉所有連接,然後刪除數據庫。SqlConnection.ClearAllPools,清除了什麼?

存在連接仍然存在的情況。此連接已在另一個應用程序域中創建。

所以我想知道哪些連接被SqlConnection.ClearAllPools關閉?

  • 只有調用進程(或AppDomain)打開的連接?
  • 本機打開的所有連接?
  • ...?

回答

9

它關閉所有由調用進程打開的連接。它會清空綁定到進程的所有連接池。 Quote

連接池和連接字符串齊頭並進。每個連接池都與一個獨特的連接字符串相關聯,並且這也是特定於應用程序的。反過來,它的意思是 - 爲每個不同的進程,應用程序域和連接字符串維護一個單獨的連接池。

+0

謝謝。文檔根本不清楚。我知道每個配置和每個應用程序都有一個池。但ClearAllPools是複數形式,它清除了幾個池。但是哪些?它不能依賴配置,因爲它是一個沒有任何參數的靜態方法。但是它依賴於進程/應用程序域嗎? – 2010-09-28 06:23:07

+0

@Stefan,是的文檔不清楚這種方法。事實上,如果使用不同的連接字符串,則每個應用程序域可能會有多個池。一旦將連接字符串傳遞給應用程序域內的'SqlConnection',此連接將從與此連接池關聯的池中提取,否則將創建一個新池(如果該連接池不存在)。這就是爲什麼還有'SqlConnection.ClearPool'方法,它允許你只清除與給定連接關聯的池。所以基本上這個池是每個連接字符串/每個應用程序域。 – 2010-09-28 06:27:47

+0

當然,這是我可以在文檔中找到的部分。但是我不能從這裏派生出ClearAllPools的「範圍」。 – 2010-09-28 06:31:38

相關問題