2013-07-10 23 views
1

我的應用程序後,連接到新創建的數據庫將定期連接到MyDatabase的和執行查詢。以前的連接錯誤

我需要處理,其中MyDatabase的數據庫中不存在,需要創建的情況下。我在做什麼現在每次我首先連接到主數據庫,並運行這樣的事情是:

SELECT * FROM sysdatabases WHERE NAME='MyDatabase'

確定MyDatabase的是否存在。如果沒有,我創建它,然後繼續連接到MyDatabase並執行查詢。

打開到主數據庫的單獨連接和執行查詢每個時間似乎不必要(即使連接彙集)。爲什麼我不能直接連接到MyDatabase? 99%的時間會成功,我可以執行查詢。 1%的失敗次數我可以檢測到MyDatabase丟失,並在該點創建它的權利?

但當我嘗試這個我打了一個問題。如果我試圖連接到MyDatabase並且它不存在,我得到一個SqlException

Cannot open database MyDatabase requested by the login. The login failed.

很好。大。我可以捕獲任何SqlException,然後轉到主數據庫以確定MyDatabase不存在並創建它。

但創建後,當我現在嘗試連接到MYDATABASE我立即得到同樣的錯誤:

Cannot open database MyDatabase requested by the login. The login failed.

它看起來是不是要重新連接,而不是返回一個緩存結果。如果在嘗試連接數據庫之前等待10秒鐘,則連接成功。

我的問題是,這是預期的緩存(我猜的話),更重要的是有處理這種情況的最佳做法?在我可以使用的SqlConnection API中是否有緩存清除或超時設置?我可以實現我自己的超時延遲,但我想知道沒有更好的方法我錯過了。

+0

創建數據庫需要多長時間?僅僅是這些文件目前正在服務器上創建,而且數據庫實際上還沒有準備好? – steoleary

+0

它幾乎立即創建。我試過創建和連接沒有以前的錯誤,它工作正常。如果以前的連接失敗,行爲會有所不同。在這種情況下,如果我在10秒內嘗試再次連接,則會返回相同的錯誤。 –

回答

1

我有完全相同的問題。

當我在嘗試打開新創建的數據庫之前調用靜態SqlConnection.ClearAllPools()方法時,它工作正常!

+0

認爲我記得這個工作,儘管在我的情況下它是一個更大系統中的一個小組件,需要這樣做,因此,是否可以接受整個連接池是有爭議的。 –