sexta-feira, 19 de agosto de 2011

Pegar nome da instancia do SQLServer e utilizar em uma connectionString para aplicações distribuidas localmente

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";

Isto para acesso via windows autentication nas duas situações.


Até a próxima.