Получить значение по умолчанию SQL Экземпляр сервера на локальном компьютере с использованием C# - PullRequest
1 голос
/ 16 апреля 2020

Существует способ проверить, какой экземпляр является Main / Default.

Я использую это

 private void GetDataSources2()  
 {  
     string ServerName = Environment.MachineName;  

     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(ServerName + "\\" + instanceName);  
             }  
         }  
     }  
 } 

Чтобы найти все экземпляры. После этого я проверяю, существует ли база данных в каком-либо экземпляре. Если нет, я хочу создать его на главном экземпляре.

1 Ответ

1 голос
/ 17 апреля 2020

Согласно MSDN имя экземпляра по умолчанию: MSSQLSERVER:

Имя экземпляра по умолчанию: MSSQLSERVER; он не требует от клиента указывать имя экземпляра для установления соединения.

Поэтому, чтобы определить, является ли экземпляр значением по умолчанию, необходимо проверить, является ли имя экземпляра MSSQLSERVER .

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

private void GetDataSources2()
{
    string ServerName = Environment.MachineName;

    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())
            {
                if (instanceName == "MSSQLSERVER")
                    // To reference default instance we should use name "ServerName".
                    Console.WriteLine(ServerName);
                else
                    // To reference non default instances we should use name "ServerName\InstanceName".
                    Console.WriteLine(ServerName + "\\" + instanceName);
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...