Para obter o nome da instancia instalada do SQLServer pode ser feita e m C# desta forma:
Primeiramente adicione: using Microsoft.Win32;
RegistryKey instancia = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server", false);
string[] inst;
inst = (String[])instancia.GetValue("InstalledInstances");
Porém, para usar esta instancia em uma connectionString de uso em aplicações distribuídas para uso local devemos também ter o nome do computador em que a mesma for instalada, pois para aplicações em rede bastaria informar o IP do servidor. Para obtermos o nome do computador poderiamos usar o seguinte código também acessando o registro:
RegistryKey registro = Registry.LocalMachine.OpenSubKey("SYSTEM", true);
RegistryKey registro2 = registro.OpenSubKey("CurrentControlSet", true);
RegistryKey registro3 = registro2.OpenSubKey("Control", true);
RegistryKey registro4 = registro3.OpenSubKey("ComputerName", true);
RegistryKey registro5 = registro4.OpenSubKey("ComputerName", true);
string NomeComputador = registro5.GetValue("ComputerName").ToString();
Fiz das duas formas de acesso ao registro no primeiro caso da instancia acessei usando uma única subkey e para pegar o nome do computador fui abrindo uma subkey de cada vez.
Para usar na connectionString poderia ser assim:
string sDBstr = @"Server=" + NomeComputador\NomeDaInstancia + ";Database=master;Trusted_Connection=Yes";
Veja a diferença para uma conexão de aplicação em rede. Poderia ser assim:
string sDBstr = @"Server=192.168.0.1;Database=master;Trusted_Connection=Yes";
Até a próxima.