Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que...

26
Acessando Dados com ADO.NET

Transcript of Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que...

Page 1: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

Acessando Dados com ADO.NET

Page 2: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

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

Page 3: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

ADO.NET

Data ClassesManager Providers

É dividido em 2 grandes classes:

Page 4: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

Usando o ADO.NET para acessar dados

Page 5: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

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

Page 6: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

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

Page 7: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

ADO.NET

Possui um conjunto de classes que implementaminterfaces que, ditem comportamentos específicos:

ConnectionCommandDataReader

Manager Providers

Page 8: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

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

Page 9: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

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)

Page 10: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

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

Page 11: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

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

Page 12: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

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())

Page 13: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

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()

Page 14: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

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

Page 15: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

DataReader

Vantagens do DataReader sobre DataSetsAcesso mais rápido aos dadosUsa menos recursos dos servidores

Page 16: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

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

Page 17: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

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

Page 18: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

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

Page 19: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

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

Page 20: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

DataTables

DataSetDataSetDataTableDataTable

DataRowCollectionDataRowCollection

DataColumnCollectionDataColumnCollection

DataConstraintCollectionDataConstraintCollection

DataRelationCollectionDataRelationCollection

Page 21: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

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")

Page 22: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

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

Page 23: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

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

Page 24: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

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

Page 25: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

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

Page 26: Acessando Dados com ADO - WEBEXPECTATIVA · yConnectionString: utilizada para informar detalhes que a aplicação necessita para conectar-se ao banco, tais como: nome do servidor,

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