У меня есть приложение на основе SQL Server (2008 R2) (C # WinForms), которое преимущественно работает на локальном компьютере с использованием локальной установки SQL Server 2008 R2. У меня есть одна проблема: если у пользователя нет запущенного экземпляра сервера, и он пытается выполнить некоторые команды или выполнить некоторые операции, запросы отправляются на SQL Server, и требуется время, чтобы вывести SqlException
, сообщая мне запрошенный экземпляр не запущен.
Я прочитал следующий вопрос и связанные с ним ответы , но эти решения далеки от идеальных. WMI кажется чрезмерным уничтожением, и я не хочу включать дополнительные .dll в мой установочный пакет для программного обеспечения, если этого можно избежать.
Я также натолкнулся на класс SqlDataSourceEnumerator
, задокументированный здесь
// Retrieve the enumerator instance and then the data.
SqlDataSourceEnumerator instance = SqlDataSourceEnumerator.Instance;
System.Data.DataTable table = instance.GetDataSources();
, который сбрасывает доступное соединение в DataTable
. Однако при возврате всех доступных соединений возникают проблемы:
"All of the available servers may or may not be listed. The list can vary depending on
factors such as timeouts and network traffic. This can cause the list to be different
on two consecutive calls." - MSDN.
Должен быть установленный способ решения этой проблемы. Скажем, у меня есть следующая строка SqlConnection
:
Data Source=localhost;Initial Catalog=MyDB;Integrated Security=True;Connection Timeout = 0
что я могу использовать в качестве эффективной (это важно) проверки того, запущен ли выбранный экземпляр («localhost» [экземпляр по умолчанию] или «SomeInstanceName»)?
Спасибо за ваше время.