Acessando Dados com ADO.NET
O queéado.net? XML restrito ADO Desenhado para ambientes conectados (cliente-servidor, por exemplo) COM Usa o OLE DB para acessar os dados Suporte avançado a XML ADO.NET Desenhado para ambientes desconectados.net Usa o DataProvider do SQL Server para acessar o SQL Server Usa o DataProvider do.net para OLE DB (o acesso ao SQLSERVER é direto e nativo) Connection e Command possuem as mesmas funcionalidades em ADO e ADO.NET Command encapsula comportamentos dos comandos SQL Connection gerencia conexão ao banco Recordset (possui muitas funcionalidades em uma mesma classe) Recordset foi eliminado e suas funcionalidades foram divididas em 3 interfaces DataReader DataAdapter DataSet
ADO.NET É dividido em 2 grandes classes: Data Classes Manager Providers
Usando o ADO.NET para acessar dados
O modelo de objetos do ADO.NET DataSet Tabela Tabela Tabela SqlDataAdapter OleDbDataAdapter.NET Data Provider para SQL Server SqlCommand OleDbCommand.NET Data Provider para OLE DB SqlConnection OleDbConnection SQL Server 7.0 (e superiores) Memória do Web Server Base de Dados Fontes OLE DB SQL 6.5, outros bancos e fontes de dados
ADO.NET Manager Providers Classes que fazem acesso aos dados Não armazenam dados diretamente mas sabem ler e escrever em bancos de dados físicos O ADO.NET possui 4 Manager Providers: SQLSERVER OLEDB ORACLE ODBC
ADO.NET Manager Providers Possui um conjunto de classes que implementam interfaces que, ditem comportamentos específicos: Connection Command DataReader
ADO.NET Connection Abstrai conexão fisicamente ao banco de dados PROPRIEDADES: ConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor, nome do banco, usuário e senha MÉTODOS: Open Close Métodos de Transação
Connection Similar ao objeto Connection do ADO Existem dois objetos Connection Nativos SqlConnection para SQL Server 7.0 e posterior OleDbConnection para fontes de dados OLE DB: Bancos de dados SQL Server 6.5 ou anterior e outros Dim strconn As String = _ "data source=(local); " & _ "initial catalog=northwind; " & _ "integrated security=true" Dim cn As New SqlConnection(strConn) Dim strconn As String = _ "data source=(local); " & _ "initial catalog=northwind; " & _ "integrated security=true" Dim cn As New SqlConnection(strConn)
Command Command No ADO você pode mandar comandos para o banco de dados através da Command e da Connection, porém a Command émaiseficiente Obrigatório no.net Utilizado para executar selects, store procedures e manipulação de parâmetros MÉTODOS: ExecuteReader ExecuteNonQuery ExecuteEscalar
Command Command MÉTODOS: ExecuteReader Utilizado para execução de comandos sql que retornem um conjunto de resultados como resposta e permitem apenas leitura a esse conjunto, que é chamado de DATAREADER select * from alunos ExecuteNonQuery Utilizado para execução de comandos sql que não retornem um conjunto de resultados como resposta insert, delete e update.. ExecuteEscalar: Utilizado para execução de comandos sql que retornem valores simples ou resultados que não estejam associados ao campos de tabelas select count(*) from alunos
Command Similar ao objeto Command do ADO Existem dois objetos Command Nativos SqlCommand para o SQL Server 7.0 ou posterior OleDbCommand para fontes de dados OLE DB: Bancos de dados SQL Server 6.5 ou anterior e outros Dim cmdauthors As New SqlCommand( _ "select count(distinct city) from authors", cn) Dim result As Integer = _ Convert.ToInt32(cmdAuthors.ExecuteScalar()) Dim cmdauthors As New SqlCommand( _ "select count(distinct city) from authors", cn) Dim result As Integer = _ Convert.ToInt32(cmdAuthors.ExecuteScalar())
Command Crie o parâmetro, configure a direção e o valor e adicione-o a uma coleção de parâmetros Passe os parâmetros numa única chamada Dim p1 As New SqlParameter("@title", SqlDbType.Text) p1.direction = ParameterDirection.Input p1.value = "Sushi, Anyone?" Dim p2 As New SqlParameter("@ytd_sales", SqlDbType.Int) p2.direction = ParameterDirection.Output Dim cmdsp As New SqlCommand("get_sales_for_title", cn) cmdsp.commandtype = CommandType.StoredProcedure cmdsp.parameters.add(p1) cmdsp.parameters.add(p2) cmdsp.executenonquery() TextBox1.Text = p2.value.tostring()
DataReader DataReader Conjunto de resultados obtidos em resposta da execução do MÉTODO ExecuteReader da Command Não contém dados, apenas representa o conjunto de resultados Forward-only Read-only Não suporta navegação ou atualização Acesso a dados rápido Conectado a uma fonte de dados
DataReader Vantagens do DataReader sobre DataSets Acesso mais rápido aos dados Usa menos recursos dos servidores
DataReader Chame Read para cada registro Retorna falso quando não há mais registros Acessando os campos Parâmetro é a posição ordinal do campo As funções Get tem a melhor performance While myreader.read() str.append(myreader(1)) str.append(myreader("field")) str.append(myreader.getdatetime(2)) End While Sempre feche o DataReader e a conexão
ADO.NET Data Classes São classes capazes de conter dados Contém dados porém desconhecem sua representação física, nem de onde eles vêm, nem como são obtidas Os dados podem prover de um banco de dados, de um arquivo xml ou até mesmo terem sido montados em runtime sem vínculo ou representação física Dados são vistos como arrays e não como cursores Podem ser ligados a controles (Bind)
ADO.NET Data Classes Suportam atualização em lote Podem conter várias tabelas de várias fonte de dados Apesar de um DataSet poder existir só e independente, muitas vezes utilizamos um DataAdapter para mediar interações entre o Banco de Dados (ou fonte física) e o DataSet
DataAdapter DataSet SelectCommand.NET Data Provider UpdateCommand Data Adapter InsertCommand DeleteCommand Command Command Command Command Cada comando é um comando SQL ou uma stored procedure Connection Banco de Dados
DataTables DataSet DataTable DataRowCollection DataColumnCollection DataConstraintCollection DataRelationCollection
Preenchendo um DataSet Use o comando Select do objeto DataAdapter Chame o método Fill para popular o DataSet Dim cn As New SqlConnection("data source=(local)\moc; integrated security=true; " + "initial catalog=northwind") Dim cmdselect As New SqlCommand() cmdselect.commandtext = "Employee Sales by Country" cmdselect.connection = cn cmdselect.commandtype = CommandType.StoredProcedure Dim da As New SqlDataAdapter() da.selectcommand = cmdselect Dim ds As New DataSet() da.fill(ds, "EmpSales")
Criando um objeto DataReader Try Crie a conexão Crie um objeto Command (com o comando) Abra a conexão com o banco Chame o método ExecuteReader Use o objeto DataReader para ver os dados Catch Verifica Erros Finally Fecha o objeto DataReader Fecha a conexão
Manipulando Erros A classe SqlException descreve a exceção que ocorreu A classe SqlException contém uma coleção de objetos SQLError Propriedade Descrição Class LineNumber Message Number Mostra o grau de severidade do erro Número da linha do batch ou stored procedure que gerou o erro Texto que descreve o erro Número do erro
Comparando DataSets e DataReaders Leitura e escrita Desconectado Pode ser vinculado a múltiplos controles Pode ler e escrever em qualquer direção Mais lento DataSet Pode incluir multiplas tabelas de diferentes bancos de dados Suportado pelas ferramentas visuais do Visual Studio.NET Somente leitura Conectado DataReader Baseado num comando SQL de um único banco de dados Só pode ser vinculado a um único controle Apenas para a frente Mais rápido Codificado manualmente
Data-Bound Controls Usando Data-Bound Controls (controles vinculados) Demonstração: Vinculando um DataGrid a um DataSet Vinculando um Data-Bound Control a um DataReader Demonstration: Customizando o DataGrid
Usando Data-Bound Controls Configure as propriedades Propriedade DataSource DataMember DataTextField DataValueField Preencha o DataSet e depois chame DataBind DataAdapter1.Fill(ds) lstemployees.databind() Descrição O DataSet que contém os dados A DataTable do DataSet O campo da DataTable que vai estar vinculado à exibição O campo da DataTable que vai ser vinculado ao valor