Łączenie się z nowo utworzoną bazą danych po poprzednim błędzie połączenia

Moja aplikacja okresowo łączy się z MyDatabase i wykonuje zapytanie.

Muszę obsłużyć przypadek, w którym baza danych MyDatabase jeszcze nie istnieje i musi zostać utworzona. To, co aktualnie robię, to za każdym razem, gdy najpierw łączę się z główną bazą danych i uruchamiam coś takiego:

SELECT * FROM sysdatabases WHERE NAME='MyDatabase'

aby ustalić, czy baza danych MyDatabase istnieje. Jeśli nie, tworzę go, a następnie kontynuuję łączenie się z MyDatabase i wykonywanie zapytania.

Otwarcie oddzielnego połączenia z główną bazą danych i wykonanie zapytania za każdym razem wydaje się niepotrzebne (nawet jeśli połączenia są gromadzone). Dlaczego nie mogę od razu połączyć się z MyDatabase? 99% czasu to się powiedzie i mogę wykonać zapytania. 1% razy nie udaje mi się wykryć brakującej bazy danych MyDatabase i utworzyć ją w tym momencie?

Ale kiedy to próbuję, trafiam na problem. Jeśli próbuję połączyć się z MyDatabase i nie istnieje, otrzymuję SqlException

Nie można otworzyć bazy danych MyDatabase żądanej przez login. Logowanie nie powiodło się.

W porządku. Świetny. Mogę przechwycić dowolny wyjątek SqlException, a następnie przejść do głównej bazy danych, aby określić, że baza MyDatabase nie istnieje i utworzyć ją.

Ale po jego utworzeniu, kiedy próbuję połączyć się z MyDatabase Inatychmiast uzyskać ten sam błąd:

Nie można otworzyć bazy danych MyDatabase żądanej przez login. Logowanie nie powiodło się.

Wygląda na to, że nie próbuje się ponownie połączyć i zamiast tego zwraca wynik buforowany. Jeśli poczekam 10 sekund po utworzeniu bazy danych przed próbą połączenia się z nią, połączenie powiedzie się.

Moje pytanie brzmi: czy to buforowanie jest oczekiwane (tak myślę) i co ważniejsze, czy istnieje najlepsza praktyka do radzenia sobie z tą sytuacją? Czy w interfejsie API SqlConnection mogę użyć ustawienia usuwania pamięci podręcznej lub limitu czasu? Myślę, że mógłbym wdrożyć własne opóźnienie czasowe, ale chciałbym wiedzieć, że brakuje lepszej metody.

questionAnswers(1)

yourAnswerToTheQuestion