У вас есть несколько способов сделать это:
- 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