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 :
Objetos DbProviderFactory - Permitem a você escrever um código de acesso comum aos principais banco de dados e provedores disponíveis no mercado;
Objetos SqlBulkCopy - Fornecem um alto desempenho em operações de lote com SQL Server e fonte de dados XML;
SqlConnection.RetrieveStatistics - Este método fornece informações detalhadas sobre as conexões SQL Server abertas;
Execução assíncrona usando SqlCommand que permite executar de forma intercambiável consultas e atualizações com grande tempo de duração;
Objetos DataTable atualizados que agora suportam características comuns aos DataSets tais como os métodos ReadXml e WriteXml;
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:
Criação de um objeto DbProvider
Criação de um objeto IDbConnection
Definição da propriedade ConnectionName.Connection.String
Criação de um objeto IDbCommand
Definição dos valores para as propriedades CommandType e CommandText
Criação de objeto IDataReader
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:
DataGridView - dgvSchema
ListBox - lstData
Button - btnDbFactory
Label - etiquetas para identificação
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) |
A rotina PreencheLista recebe os seguintes parâmetros :
strSqlProvider - indicando o provedor usado , no nosso caso: System.Data.SqlClient
strSqlConn - indicando a string de conexão
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: