Alex Klaus..
17
你有几种方法可以做到:
SmoApplication.EnumAvailableSqlServers()
SqlDataSourceEnumerator.Instance
直接访问系统注册表
直接访问不是MS推荐的解决方案,因为它们可以更改密钥/路径.但其他解决方案并不健全,无法在64位平台上提供实例.
因此,我更喜欢检查系统注册表中的SQL Server实例.这样做,请记住x86和x64平台之间注册表访问的区别.Windows 64位将数据存储在系统注册表的不同部分,并将它们组合到视图中.所以使用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);
}
}
}
如果您在64位操作系统上寻找32位实例(非常奇怪,但可能),您需要查看:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server