VB.NET - Trocando o banco de dados sem fechar a conexão
Você pode trocar o banco de dados em uso pela conexão atual sem precisar fechar a conexão. Sabia ???
Você faz isto usando o método ChangeDatabase().
O método ChangeDatabase() esta definido na interface IDbConnection que representa uma conexão para uma fonte de dados e esta implementada pelo provedores de dados .NET para banco de dados relacionais como SQL Server , Oracle e OLE DB.
O método é usado para trocar o banco de dados atual para uma conexão aberta. Sua utilização requer somente um parâmetro : o nome do banco de dados que você deseja usar no lugar do banco de dados atual.
A propriedade DataBase do objeto connection pode ser usada para verificar o banco de dados em uso pois é atualizada dinamicamente e retorna o nome do banco de dados para a conexão aberta . Ao fechar a conexão após chamar o método ChangeDatabase() o banco de dados será a ser usado na próxima conexão será o banco de dados usado na string de conexão original.
Para este artigo vou usar o servidor MSDE onde tenho os banco de dados : Teste e Macoratti.
Inicialmente a string de conexão será definida para realizar a conexão com o MSDE e usar o banco de dados Testes.
Em seguida vou trocar o banco de dados para Macoratti e exibir os dados da tabela Links (só para provar que o BD foi trocado).
Ao fechar a conexão o banco de dados Teste , que foi definido na conexão inicial, volta a ser usado se eu abrir novamente a conexão.
O resultado destas operações é exibido em uma caixa de texto multiline usando o objeto StringBuilder.
Para exibir as propriedades do estado da conexão e do banco de dados usei as propriedades State e Database do objeto Connection.
Inicie um novo projeto no VS.NET e no formulário padrão insira os componentes conforme figura abaixo:
Defina os seguintes namespaces no projeto:
Imports System.Data.SqlClient
Imports System.Text
No início do formulário vamos definir as seguintes variáveis:
Dim conexao As String
Dim ds As DataSet
Dim da As SqlDataAdapter
Dim resultado As New StringBuilder
Dim conn As SqlConnection
No evento Load do formulário temos o código que define a string de conexão atual e abre a conexão:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'string de conexao conexao = "integrated security=SSPI;data source=MACORATTI\VSDOTNET;persist security info=True;initial catalog=Teste" ' cria uma conexao com o MSDE conn = New SqlConnection(conexao) ' abre a conexao conn.Open() End Sub |
No evento Click do botão de comando - Trocar Banco de dados - insira o código a seguir:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click resultado.Append(("String de conexao : " & Environment.NewLine)) resultado.Append((conn.ConnectionString & Environment.NewLine & Environment.NewLine)) resultado.Append(("Estado da conexao (Aberta) : " & conn.State & Environment.NewLine)) resultado.Append(("Banco de dados Inicial : " & conn.Database & Environment.NewLine)) ' muda o banco de dados conn.ChangeDatabase("Macoratti") resultado.Append("Trocando o banco de dados..." & Environment.NewLine & Environment.NewLine) resultado.Append(("Novo Banco de dados : " & conn.Database & Environment.NewLine & Environment.NewLine)) resultado.Append("Exibindo dados da tabela Links." & Environment.NewLine & Environment.NewLine) 'Cria um objeto SqlDataAdapter da = New SqlDataAdapter("Select * from Links", conn) '' Mapeia a tabela Clientes da.TableMappings.Add("Table", "Links") '' Preenche o dataset Dim ds = New DataSet Try da.Fill(ds) Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical) End Try ' Vincula o dataset ao datagrid dg.SetDataBinding(ds, "Links") txtResultado.Text = resultado.ToString() End Sub |
No evento Click do botão - Fechar a conexão - insira o código abaixo:
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click ' fecha a conexao e exibe o banco de dados que será usado na próxima abertura da conexao conn.Close() resultado.Append(("Estado da conexão (Fechada) : " & conn.State & Environment.NewLine)) resultado.Append(("Banco de dados a ser usado na próxima conexão : " & conn.Database)) txtResultado.Text = resultado.ToString() End Sub |
Executando o projeto para exemplo acima teremos:
Creio que não sejam necessárias mais explicações.
Até o próximo artigo ...
José Carlos Macoratti