Проверьте, установлен ли SQL Server на компьютере через C # - PullRequest
9 голосов
/ 14 марта 2010

Я делаю приложение, которое представляет собой пользовательский интерфейс для доступа к 2 типам баз данных - SQLite и SQL Server.

Дело в том, что SQLite не нужно «устанавливать» , поскольку это просто база данных с плоскими файлами, но, с другой стороны, SQL Server (Express / Normal) необходимо установить перед использованием. Мой вопрос прост:

Есть ли способ узнать, установлен ли экземпляр SQL Server на локальном компьютере с помощью программы на C #?

Ответы [ 2 ]

17 голосов
/ 26 февраля 2013

У вас есть несколько способов сделать это:

  • SmoApplication.EnumAvailableSqlServers ()
  • SqlDataSourceEnumerator.Instance
  • Прямой доступ к системному реестру

Прямой доступ не является рекомендуемым решением MS, поскольку они могут изменять ключи / пути. Но другие решения не являются надежными и не дают экземпляров на 64-битных платформах.

Поэтому я предпочитаю проверять экземпляры SQL Server в системном реестре. При этом следует учитывать разницу в доступе к реестру между платформами x86 и x64 . Windows 64-bit хранит данные в разных частях системного реестра и объединяет их в представления. Поэтому использование RegistryView необходимо.

using Microsoft.Win32;

RegistryView registryView = Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32;
using (RegistryKey hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView))
{
    RegistryKey instanceKey = hklm.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL", false);
    if (instanceKey != null)
    {
        foreach (var instanceName in instanceKey.GetValueNames())
        {
            Console.WriteLine(Environment.MachineName + @"\" + instanceName);
        }
    }
}

Если вы ищете 32-битные экземпляры в 64-битной ОС (довольно странно, но возможно), вам нужно посмотреть:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server
10 голосов
/ 14 марта 2010

Если ваше приложение установлено на данном компьютере, вы можете проверить реестр, используя что-то похожее на это:

using Microsoft.Win32; 
RegistryKey RK = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\MICROSOFT\Microsoft SQL Server");
    if(RK != null)
    {
       // It's there 
    }
    else
    {
       // It's not there 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...