Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que...
Transcript of Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que...
Acessando Dados com ADO.NET
O que é ADO.NET?
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 foi eliminado e suas funcionalidadesforam divididas em 3 interfaces
DataReader
DataAdapter
DataSet
Recordset(possui muitas funcionalidades emuma mesma classe)
Suporte avançado a XMLXML restrito
ADO.NETADO
Desenhado para ambientes desconectadosDesenhado para ambientesconectados(cliente-servidor, por exemplo)
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)
Usa o OLE DB para acessar osdados
.NETCOM
ADO.NET
Data ClassesManager Providers
É dividido em 2 grandes classes:
Usando o ADO.NET para acessar dados
O modelo de objetos do ADO.NET
TabelaTabela
.NET Data Providerpara OLE DB
.NET Data Providerpara OLE DB
OleDbDataAdapterOleDbDataAdapter
OleDbConnectionOleDbConnection
.NET Data Providerpara SQL Server
.NET Data Providerpara SQL Server
SqlDataAdapterSqlDataAdapter
SqlConnectionSqlConnection
DataSetDataSet
TabelaTabela TabelaTabela
SQL Server 7.0(e superiores)
Fontes OLE DBSQL 6.5, outros bancos
e fontes de dados
Memória do Web ServerBase de Dados
SqlCommandSqlCommand OleDbCommandOleDbCommand
ADO.NET
Classes que fazem acesso aos dadosNão armazenam dados diretamente mas sabem ler e escrever em bancos de dados físicosO ADO.NET possui 4 Manager Providers:
SQLSERVEROLEDBORACLEODBC
Manager Providers
ADO.NET
Possui um conjunto de classes que implementaminterfaces que, ditem comportamentos específicos:
ConnectionCommandDataReader
Manager Providers
ADO.NET
Abstrai conexão fisicamente ao banco de dadosPROPRIEDADES:
ConnectionString: utilizada para informar detalhes que a aplicaçãonecessita para conectar-se ao banco, tais como: nome do servidor, nome do banco, usuário e senha
MÉTODOS:OpenCloseMétodos de Transação
Connection
Connection
Similar ao objeto Connection do ADOExistem dois objetos Connection Nativos
SqlConnection para SQL Server 7.0 e posteriorOleDbConnection 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)
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
No ADO você pode mandar comandos para o banco de dados através da Command e da Connection, porém a Command é mais eficienteObrigatório no .NETUtilizado para executar selects, store procedures e manipulação de parâmetrosMÉTODOS:
ExecuteReaderExecuteNonQueryExecuteEscalar
Command
Command
MÉTODOS:ExecuteReader
Utilizado para execução de comandos sql que retornem um conjunto de resultados como resposta e permitem apenasleitura a esse conjunto, que é chamado de DATAREADERselect * from alunos
ExecuteNonQueryUtilizado para execução de comandos sql que não retornemum conjunto de resultados como respostainsert, delete e update …..
ExecuteEscalar:Utilizado para execução de comandos sql que retornemvalores simples ou resultados que não estejam associadosao campos de tabelasselect count(*) from alunos
Command
Command
Similar ao objeto Command do ADO Existem dois objetos Command Nativos
SqlCommand para o SQL Server 7.0 ou posteriorOleDbCommand 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())
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âmetrosPasse os parâmetros numa única chamada
Dim p1 As New SqlParameter("@title", SqlDbType.Text)p1.Direction = ParameterDirection.Inputp1.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.StoredProcedurecmdSP.Parameters.Add(p1)cmdSP.Parameters.Add(p2) cmdSP.ExecuteNonQuery()
TextBox1.Text = p2.Value.ToString()
Dim p1 As New SqlParameter("@title", SqlDbType.Text)p1.Direction = ParameterDirection.Inputp1.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.StoredProcedurecmdSP.Parameters.Add(p1)cmdSP.Parameters.Add(p2) cmdSP.ExecuteNonQuery()
TextBox1.Text = p2.Value.ToString()
DataReader
Conjunto de resultados obtidos em resposta da execução do MÉTODO ExecuteReader da CommandNão contém dados, apenas representa o conjunto de resultadosForward-onlyRead-onlyNão suporta navegação ou atualizaçãoAcesso a dados rápidoConectado a uma fonte de dados
DataReader
DataReader
Vantagens do DataReader sobre DataSetsAcesso mais rápido aos dadosUsa menos recursos dos servidores
DataReader
Chame Read para cada registroRetorna falso quando não há mais registros
Acessando os camposParâmetro é a posição ordinal do campoAs funções Get tem a melhor performance
Sempre feche o DataReader e a conexão
While myReader.Read()str.Append(myReader(1))str.Append(myReader("field"))str.Append(myReader.GetDateTime(2))
End While
While myReader.Read()str.Append(myReader(1))str.Append(myReader("field"))str.Append(myReader.GetDateTime(2))
End While
ADO.NET
São classes capazes de conter dadosContém dados porém desconhecem sua representaçãofísica, nem de onde eles vêm, nem como são obtidasOs dados podem prover de um banco de dados, de um arquivo xml ou até mesmo terem sido montados em run-time sem vínculo ou representação físicaDados são vistos como arrays e não como cursoresPodem ser ligados a controles (Bind)
Data Classes
ADO.NET
Suportam atualização em lotePodem conter várias tabelas de várias fonte de dadosApesar de um DataSet poder existir só e independente, muitas vezes utilizamos um DataAdapter para mediarinterações entre o Banco de Dados (ou fonte física) e o DataSet
Data Classes
DataAdapter
.NET Data Provider.NET Data Provider
DataSetDataSet
Data AdapterData Adapter
ConnectionConnection
CommandCommand CommandCommand CommandCommand CommandCommand
SelectCommandSelectCommand UpdateCommandUpdateCommand InsertCommandInsertCommand DeleteCommandDeleteCommand
Banco de Dados
Cada comando é um comando SQL ou umastored procedure
Cada comando é um comando SQL ou umastored procedure
DataTables
DataSetDataSetDataTableDataTable
DataRowCollectionDataRowCollection
DataColumnCollectionDataColumnCollection
DataConstraintCollectionDataConstraintCollection
DataRelationCollectionDataRelationCollection
Preenchendo um DataSet
Use o comando Select do objeto DataAdapterChame 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 = cncmdSelect.CommandType = CommandType.StoredProcedure…Dim da As New SqlDataAdapter()da.SelectCommand = cmdSelectDim ds As New DataSet()da.Fill(ds, "EmpSales")
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 = cncmdSelect.CommandType = CommandType.StoredProcedure…Dim da As New SqlDataAdapter()da.SelectCommand = cmdSelectDim ds As New DataSet()da.Fill(ds, "EmpSales")
Try…Crie a conexãoCrie um objeto Command (com o comando)Abra a conexão com o bancoChame o método ExecuteReaderUse o objeto DataReader para ver os dados
Catch…Verifica Erros
Finally…Fecha o objeto DataReaderFecha a conexão
Criando um objeto DataReader
Manipulando Erros
A classe SqlException descreve a exceção que ocorreuA classe SqlException contém uma coleção de objetosSQLError
DescriçãoPropriedade
Número do erroNumber
Mostra o grau de severidade do erroClass
Texto que descreve o erroMessage
Número da linha do batch ou stored procedureque gerou o erroLineNumber
Comparando DataSets e DataReaders
ConectadoDesconectadoSó pode ser vinculado a um únicocontrole
Pode ser vinculado a múltiploscontroles
Apenas para a frentePode ler e escrever em qualquerdireção
Suportado pelas ferramentasvisuais do Visual Studio.NET
Mais lento
Pode incluir multiplas tabelas de diferentes bancos de dados
Leitura e escrita
DataSet DataReader
Codificado manualmente
Somente leitura
Mais rápido
Baseado num comando SQL de um único banco de dados
Data-Bound Controls
Usando Data-Bound Controls (controles vinculados)Demonstração: Vinculando um DataGrid a um DataSetVinculando um Data-Bound Control a um DataReaderDemonstration: Customizando o DataGrid
Usando Data-Bound Controls
Configure as propriedades
Preencha o DataSet e depois chame DataBindDataAdapter1.Fill(ds)lstEmployees.DataBind()DataAdapter1.Fill(ds)lstEmployees.DataBind()
O campo da DataTable que vai estar vinculadoà exibiçãoDataTextField
O campo da DataTable que vai ser vinculadoao valorDataValueField
A DataTable do DataSetDataMember
DescriçãoPropriedadeO DataSet que contém os dadosDataSource