VB.NET - Obtendo as instâncias do SQL Server instaladas


Vamos falar um pouco do SQL Server.  Quando digo SQL Server estou me referindo ao Sistema Gerenciador de Banco de dados (SGBD). 

O SQL Server gerencia dois tipos de base de dados :

  1. OLTP  - On line transaction processing
  2. OLAP  - On-line analitical processing. 

Durante a instalação do SQL Server são gerados quatro bancos de dados do sistema:

  1. Master = Controla todas as tabelas do sistema de banco de dados.
  2. Model = É usado como uma máscara quando os banco de dados definidos pelo usuário são criados. Funciona como um protótipo para criação de outras base de dados.
  3. Msdb = Utilizando para o armazenamento de alertas e jobs.
  4. TempDB = Fornece o espaço de armazenamento para tabelas temporárias e outros objetos temporários.

O SQL Server oferece os seguintes serviços:

O SQL Server pode possuir múltiplas instâncias identificadas por:  nome do computador/nome da instância . Não há um limite para as instâncias , e, todas elas são independentes, como se fossem servidores diferentes.

Seria interessante podemos saber quais instâncias temos instaladas em nossa máquina. Este artigo mostra como você pode fazer isto usando código VB.NET. Vou mostrar duas maneiras resolver o problema, uma usando o VS 2003 e outra usando o VS2005.( isto não quer dizer que não existam outras.)

Obtendo as instâncias instaladas do SQL Server

1- Usando o objeto SQLDMO - (VS 2003)

Para usar este código você deve fazer uma referência ao biblioteca SQLDMO no seu projeto.

Crie um novo projeto no VS 2003 e salve com o nome de sqlInstancias. A seguir clique com o botão direito do mouse sobre o nome do projeto na janela Solution Explorer e selecione a opção Add Refernece. Na janela Add Reference marque a aba COM e selecione a library - Microsoft SQLDMO object Library, conforme abaixo:

No formulário padrão - form1.vb - inclua um botão de comando e um controle ComboBox. A seguir inclua o seguinte código no evento Click do botão de comando:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


' Lista todos os servidores disponíveis na rede

Dim i As Integer

Dim oNames As SQLDMO.NameList

Dim oSQLApp As SQLDMO.Application


oSQLApp =
New SQLDMO.Application

oNames = oSQLApp.ListAvailableSQLServers()


For
i = 1 To oNames.Count

  ' Inclui os nomes do servidores instalados em um combobox

   cboListServers.Items.Add(oNames.Item(i).ToString)

Next i

 

End Sub

Nota: Este código irá funcionar também no VB6 com as adaptações pertinentes. Para que o resultado seja o desejado você deverá ter instalados no mínimo o service pack - sp1- para o SQL Server 2000.

2- Acessando o registro do Windows  (VB 2005)

Crie um novo projeto no VB 2005 Express Edition e no formulário padrão inclua um botão de comando e um controle Combobox.A seguir inclua o seguinte código no evento Click do botão de comando:

Dim instancias() As String


'obtem as instâncias do SQL Server que estão instaladas

instancias = instanciasInstaladas()


For
Each s As String In instancias

  If s = "MSSQLSERVER" Then

     cboInstanciasSQL.Items.Add("(MACORATI)")

  Else

     cboInstanciasSQL.Items.Add("(local)\" & s)

  End If

Next
 

cboInstanciasSQL.Text = "(local)"

Obs: MACORATI é o nome da minha máquina local.

Neste código a função instanciasInstaladas retorna as instâncias do SQL Server que estão instaladas na sua máquina local. O código da função é o seguinte:

Private Function instanciasInstaladas() As String()

  Dim registro As Microsoft.Win32.RegistryKey
  registro = My.Computer.Registry.LocalMachine.OpenSubKey(
"SOFTWARE\Microsoft\Microsoft SQL Server", False)

  Dim instancias() As String
  instancias =
CType(registro.GetValue("InstalledInstances"), String())

  Return instancias

End Function

A função usa  o objeto My.Computer.Registry que oferece métodos e propriedades para trabalhar com chaves do registro

My.Computer.Registry.LocalMachine retorna uma tipo de chave de registro que fornece ao acesso a HKEY_LOCAL_MACHINE.

HKEY_LOCAL_MACHINE é usado para armazenar configurações que não variam de usuário para usuário sendo que todos os usuários do sistema Windows compartilham esta chave. Nela existem cinco sub-chaves:

  1. Hardware
  2. SAM
  3. Security
  4. Software
  5. System

O método GetValue é usado para retornar um valor da chave do registro. Na minha máquina local existem instaladas o SQL Server Express e o SQL Server 2000. O retorno das instâncias será: "SQLEXPRESS"  e   "MSSQLSERVER"

O resultado obtido será:

Bom estudo e até o próximo artigo VB.NET...


José Carlos Macoratti