VB.NET - Os  novos recursos da ADO.NET


Se você pretende trabalhar com banco de dados em suas aplicações usando o VB.NET  e deseja gerar produtos robustos e com bom desempenho pode esquecer os assistentes que em tempo de desenho da aplicação geram todo o código. Os assistentes podem ser uma boa propaganda para exibições em apresentações onde a plateia suspira mas em aplicações de produção têm pouca utilidade.

 

Seguindo esta trajetória estarei mostrando em uma série de artigos como você pode usar os novos recursos da ADO.NET. Vou começar listando alguns dos mais importantes os quais são :

Usando o DbProviderFactories

 

Vou começar com o objeto DbProviderFactory, visto que a classe DbProviderFactories fornece a oportunidade de criar aplicações que podem acessar múltiplos banco de dados relacionais. Se você conhece este terreno sabe o quanto é difícil escrever um código para acesso a dados que seja o mais escalável possível. Diferenças de sintaxe na SQL, tipos de dados diferentes, diversos dialetos nas stored procedures fazem com o caminho seja bem espinhoso.

 

Vou mostrar como podemos contornar este espinhoso caminho usando este novo recurso da ADO.NET 2.0.

 

Nota: Leia o artigo VB.NET 2005  - Usando factories de Provedores abordando o assunto DbProviderFactories.

 

A criação de um objeto DataReader a partir da classe DbProviderFactories pode ser descrito nas seguintes etapas:

Obs: O objeto IDataReader possui os mesmos membros da versão anterior mais o novo método GetSchemaTable

 

O exemplo que vou mostrar será criado no VB.NET 2005 Express Edition acessando o SQL Server 2005 Express e irá exibir os dados e a o esquema contendo as colunas e as propriedades da tabela Clientes do banco de dados Cadastro.mdf criado no SQL Server 2005.

 

Crie um novo projeto no VB2005 com o nome de DbFactoryTeste e no formulário padrão inclua os componentes:

O formulário padrão exibindo os controles incluídos:

 

 

Defina as seguintes variáveis usadas no projeto:

 

 'Configuração do provedor SqlClient - tabela Cliente
Private strSqlProvider As String = "System.Data.SqlClient"
Private strSqlConn As String = "Data Source=.\SQLEXPRESS;AttachDbFilename='D:\Documents and Settings\Macoratti.MACORATI\ _ 
                                          Meus documentos\Cadastro.mdf';Integrated Security=True;Connect Timeout=30;User Instance=True"
Private strSqlTabela As String = "Clientes"
  

No evento Click do botão de comando inclua o seguinte código:

 

Private Sub btnDbFactory_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDbFactory.Click

PreencheLista(strSqlProvider, strSqlConn, strSqlTabela)
Me.Text =
"Testando DbFactory - SqlClient"

End Sub

 

A rotina PreencheLista recebe os seguintes parâmetros :

  1. strSqlProvider - indicando o provedor usado , no nosso caso: System.Data.SqlClient

  2. strSqlConn - indicando a string de conexão

  3. strSqlTabela - informando a tabela a ser acessada. (Clientes)

Abaixo temos o código da rotina PreencheLista que irá usar o DbProviderFactory e o método GetSchemaTable para obter os dados e o esquema da tabela Clientes:

 

   Private Sub PreencheLista(ByVal strProvider As String, ByVal strConn As String, ByVal strTabela As String)
        'Cria um DbProviderFactory, IDbConnection, IDbCommand, e IDataReader
        'para o data provider especificado
        Dim cnFactory As IDbConnection = Nothing
        Dim drData As IDataReader = Nothing
        Try
            'Define o DataProvider
            Dim dpFactory As DbProviderFactory = DbProviderFactories.GetFactory(strProvider)
            'Cria uma conexao
            cnFactory = dpFactory.CreateConnection()
            cnFactory.ConnectionString = strConn
            'Cria um comando e abre a conexão
            Dim cmFactory As IDbCommand = cnFactory.CreateCommand
            cmFactory.CommandType = CommandType.Text
            cmFactory.CommandText = "SELECT * FROM " + strTabela
            cnFactory.Open()
            'Cria um DataReader
            drData = cmFactory.ExecuteReader(CommandBehavior.KeyInfo)
            lstData.Items.Clear()
            Dim dtSchema As DataTable
 
            With drData
 
                While drData.Read
                    lstData.Items.Add(.GetValue(0).ToString + " - " + .GetValue(1).ToString)
                End While
 
                 'obtem o esquema da tabela clientes
                dtSchema = drData.GetSchemaTable()
                With dgvSchema
                    If dtSchema.Columns.Count > 1 Then
                        .RowHeadersVisible = False
                        .DataSource = dtSchema
                        .AutoGenerateColumns = True
                        Application.DoEvents()
                        If .Columns.Count > 0 Then
                            .Columns(0).Frozen = True
                            .Columns("BaseSchemaName").Width = 90
                            If .Columns.Count = 24 Then
                                .Columns(23).Width = 200
                            End If
                        End If
                    End If
                End With
            End With

            If dgvSchema.Columns.Count > 0 Then
                'documentação para a coluna de dados
                Dim intCtr As Integer
                Dim strDataCols As String = ""
                For intCtr = 0 To dgvSchema.Rows(0).Cells.Count - 1
                    strDataCols += dgvSchema.Columns(intCtr).Name + vbTab + dgvSchema.Rows(0).Cells(intCtr).Value.ToString + vbCrLf
                Next intCtr
                intCtr = 0
            End If
        Catch exc As Exception
            MsgBox(exc.Message + exc.StackTrace)
        Finally
            If Not drData Is Nothing Then
                drData.Close()
            End If
            If Not cnFactory Is Nothing Then
                cnFactory.Close()
            End If
        End Try
    End Sub

 

 

Executando o projeto teremos o seguinte resultado:

 

 

Aguarde em breve mais artigos sobre os novos recursos VB.NET 2005. Até breve...
 

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti