1. Todos sabemos que a Microsoft no ASP NET agrupou as classes com funcionalidades semelhantes dentro de uma NameSpace. Portanto, se vamos trabalhar com o disco a namespace a ser adicionada é a System.IO e no caso de acesso a banco de dados a NameSpace é a System.Data que é um conjunto de classes de acesso a dados.
2. A linguagem ASP NET possuí elementos de dados nativos que estão dentro da NameSpace System.Data.
Sendo assim, como ela é instalada por default no sistema sempre estará disponível.
3. No entanto temos inúmeras fontes de dados, desde arquivos XML, JSON, Excel, Access até Servidores SQL.
Muitas dessas fontes de dados são proprietárias e requerem uma lincença de uso como um SQL Client tanto
da Microsoft quanto da Oracle.
Essas 'fontes de dados' são chamadas de 'Data Providers' e cada uma fonte tem sua NameSpace especifica.
4. Para dar flexibilidade e versatilidade aos objetos de dados foram feitas namespaces de acesso as
fontes de dados (Data Providers) que fazem a 'interface' entre os bancos de dados e o ASP NET.
5-Para cada tipo de fonte de dados ('Data Source') existe um 'Data Provider':
Data Source | Data Provider |
---|---|
Microsoft Acess Database File | .NET Framework Data Provider OLE DB - Microsoft.Jet.OLEDB.4.0 - System.Data.OleDb (*1) |
Microsoft ODBC Data Sorce(Excel/Office) | .NET Framework Data Provider ODBC - System.Data.Odbc (*4) |
Microsoft SQL Server | .NET Framework Data Provider for SQL Server - System.Data.SqlClient (*2) |
Microsoft SQL Server Compact 3.5 | .NET Framework Data Provider for Microsoft SQL Server compact 3.5 |
Microsoft SQL Server DatabaseFile | .NET Framework Data Provider for Microsoft SQL |
Oracle Database | .NET Framework Data Provider for Oracle - System.Data.OracleClient (*3) |
*1-MS SQL Server 7 ou anterior.
*2-MS SQL Server 2005, Azure ou mais recente.
*3-Oracle 7.3, 8i, 9i, 10g.
*4-Precisa do Office instalado para funcionar.
Todo data provider tem 3 elementos :
1-Conexão ( connection ): Proporciona a conexão com a fonte de dados.
2-Commando ( command ) : executa uma querie que não retorna dados ( Ex: delete, insert, etc..)
2.1-Emite os comandos para as bases de dados que retornam ou modificam dados.
2.2-Executam Stored Procedures
2.3-Enviam ou recebem parametros de informação
3-DataAdapter
4-DataReader
Para melhor suportar o modelo 'desconectado', o ADO.NET os componentes foram separados em 2 partes :
1-Acesso a dados- Exemplo: DataSet
2-Manipulação de dados. - Exemplo : Data Provider
1-Uma conexão com um banco de dados (Connection ).
2-Um objeto para envio de comandos (Command ).
3-Um objeto para adaptar a fonte de dados com o Framework(Data Adapter).
4-Um objeto para leitura dos dados (Data Reader).
5-Um objeto para tratamento de procedures (Parameter).
6-Um objeto para tratamento de erros(Exception).
O ADO tem 3 tipos de classes de acordo com a conexão com os bancos de dados que elas fazem :
É o método básico de acesso ao banco de dados. Exemplo : Classe DataTable.
Os objetos desta classe conseguem armazenar as informações mesmo depois de desconectados do banco de
dados.
Contudo, se algum dado for alterado no banco de dados este objeto não receberá as atualizações.
1-São as classes que compartilham informações entre todos os 'Data Providers'
Todas as namespaces de acessos a dados são adicionadas fazendo referencia a Namespace específica do Objeto.
Muitas das NameSpaces só estarão disponiveis se seus respectivos 'drivers' estiverem instalados. Por exemplo, para utilizar a namespace SQLClient, System.Data.OracleClient, System.Data.OleDb primeiros temos que instalar os clients desses objetos.
1.1-Define os objetos DataSet e DataTable
1.2-Adicionar a referêcia a NameSpace System.Data.
2.1-Acesso a fontes de dados Microsoft Access e SQL da versão 7 ou anterior
2.2-Adicionar a referêcia a NameSpace System.Data.OleDB
2.3-Define os objetos
OleDb.OleDbConnection ,
OleDb.OleDbCommand, OleDbDataAdapter, OleDbDataReader, OleDbParameter e OleDbException.
3.1-Acesso ao Microsoft SQL Server.
3.2-Adicionar a referêcia a NameSpace
System.Data.SQLClient
3.3-Define os objetos
SqlConnection, SqlCommand,
SqlDataAdapter, SqlDataReader, SqlClient.SqlParameter e SqlException.
1-Se você pretende ler os dados do Data Source mas não vai manipular, alterar, eliminar, apenas transferir de um
componente /objeto para outro, utilize a classe DataReader.
2-Se você deseja acessar um banco de dados mas não pretende reter as informações, você pode usar o objeto
Comando para criar um DataReader.
O objeto DataReader precisa da conexão aberta para acessar os dados e sempre trabalha forward-only e read-only.
Proporciona um método de acesso de alto-desempenho e read-only.
1-O DataAdapter obtém as informações do banco de dados mas são os objetos DataSet ou DataTable que armazenam as
informações.
2-Tanto DataSet como DataTable são sem conexão, ou seja, mesmo desconectadas retém a informação
obtida.
Digamos que o DataSet e DataTable trazem a informação para a memória do computador
( in-memory database ).
Desvantagem : Se a informação for alterada no banco de dados, você não ficará sabendo.
O Data Adapter proporciona uma 'ponte' entre o 'DataSet' e o 'Data Source'.
1-É o componente central da arquitetura 'desconectada' do ADO.NET.
2-Pode conter uma coleção de DataTables, registros, campos, pks, fks, constraints,
Cuidado : NÃO CONFUNDIR 'OLE DB .NET DATA PROVIDER' com os genéricos 'OLE DB PROVIDERS'.
1-A primeira coisa a ser definida é o correto string de conexão.
Seu formato depende totalmente da fonte de dados e pode conter usuário, senha, nome do servidor,
nome da instância da base de dados, se a conexão é trusted com o Windows etc.
2-A segunda coisa a fazer é abrir a conexão com o banco de dados.
O Banco de dados é chamado de Data Source do programa.
Esta funcionalidade não retorna dados mas retorna o status indicando
se a conexão foi ou não aceita.
Se a conexão for recusada não adianta prosseguir, todos os comandos enviados darão erro pois
a conexão é a ponte que conecta a fonte de dados ao consumidor desses dados.
3-A terceira coisa é montar e testar a querie.
Normalmente faço o teste com uma ferramenta externa (tipo mySQL Admin, mySQL Workbench) e ai
trago para a minha página ASP e faço as modificações.
4-A quarta coisa é executar a consulta.
5-A quinta coisa é verificar se a consulta foi executada com sucesso. Para isso verificamos o status retornado pela execução da querie. Se deu erro algumas etapas abaixo devem ser puladas.
6-Caso tenha sucesso os dados podem ser enviados ao controle que consumirá os dados. Pode ser um gridview, um data repeater ou coisa parecida.
Deve-se liberar os objetos de dados (data reader/adapter, datatable, dataset) colocando eles como null e finalmente fechar a conexão com o banco de dados. Note que fechar o banco de dados pode ser o passo 5 caso os objetos de acesso a dados sejam objetos desconectados das bases de dados.
Importante : Sabemos que ao colocar null nos objetos de acesso a dados apenas torna eles inativos
no sistema e que na realidade não libera memória pois o 'Garbage Collector' do .NET só roda depois
que a aplicação finalizar completamente, ou seja, depois que a página for totalmente enviada ao
cliente.
Contudo as regras e boas práticas pedem para que isso seja feito especialmente para não utilizar
esses objetos 'sujos' com dados de pesquisas anteriores.
O DataSet é uma representação relacional baseada em memória de dados e o principal objeto desconectado de dados conectado.
O DataSet contém uma coleção de objetos DataTable e DataRelation.
Os objetos do DataTable podem conter restrições de chave exclusivas e estrangeiras para reforçar a integridade dos dados.
O Data-Set também fornece métodos para clonar o esquema DataSet, copiar o DataSet, mesclar com outros objetos DataSet e recuperando
alterações do DataSet.
O objeto DataTable contém os objetos DataColumn os quais definem o esquema a que pertencem.
O objeto DataTable também contém os objetos DataRow que contém os dados.
Os Objetos DataRow contém as propriedades RowState e DataRowVersion.
A propriedade RowStateindica se o DataRow deve ser inserido, atualizado ou eliminado da base de dados.
O objeto DataRow contém uma cópia dos dados da base de dados. Este recurso possibilita o roll back de dados.
O objeto DataSet é uma representação em memória dos dados no banco de dados com todas as suas propriedades
relacionais. Portanto, o objeto DataSet contém as coleções de objetos DataTable e DataRelation
Os objetos DataSet e DataTable podem ser serializados ou desserializados de um stream ou XML.
Os dados do DataSet, DataTable e DataRow podem ser anexados(mergeados) dentro de um objeto
DataSet.
O recurso LINQ para o DataSet contém um mecanismo que permite escrever complexas queries contra dados na memória
usando C# ou VB NET.
São classes que transferem dados do lado do servidor(BD) para o lado do cliente(Web Server).
OleDb Classe para acesso a bases de dados genéricas de muitas fontes de dados
Elas proporcionam acesso a bd muito antigas ( como o MS SQL SRV 6.5 e versões anteriores) ou
a bd não nativas da Microsoft, como Sybase, DB2/400 e o Microsoft Access.
ODBC É uma classe de uso geral para diversas bases de dados. São classes 'antiquadas' que são usadas
quando nenhum novo método de acesso foi desenvolvido para o bd.
Não é muito utilizado porque depende de configuração local na máquina do cliente muitas vezes.
SQL Server É uma classe desenvolvida exclusivamente para o MS SQL Server e é muito similar ao
'provider' OLEDB, só que exclusivo para bd SQL Server.
Esta classe são feitas para as versões 7, 2005 e 2008.
Oracle É uma classe desenvolvida exclusivamente para o bd Oracle para acessar o listener fornecido pela própria Oracle. É similar ao OleDb mas tem performance superior.
1-A primeira coisa que você precisa ter é uma fonte de dados e uma maneira de acessá-la.
A natureza dessa fonte de dados muitas vezes determina como devemos acessá-la
porque, seja qual for, foi feita uma classe ou específica ou genérica que faz isso
.
Praticamente sempre você vai precisar de alguma ferramenta para acessar um banco de dados.
Se for um bd Access você vai precisar do Office. Não se esqueça que se o office for de 32 bits
você deverá compilar a sua app como 32 bits senão as dlls do office não estarão disponíveis para
a sua aplicação. Os componentes para este tipo de bd estão no Microsoft Data Objects que
são instalados com o office ou você poderá baixar o MDACTYPE para isto.
Se a bd for MS SQL SRV, você precisará instalar o SQL Client pelo menos, no caso de sua máquina
não ser também a servidora do banco de dados. Normalmente, se sua máquina é o servidor web
é recomendado que o servidor de banco de dados seja outra máquina, não só para ter maior
performance mas por motivos de segurança.
Se se bd for um Oracle você precisa instalar um client compatível com a versão da base de dados
que deseja acessar. A bd Oracle fala com o resto do mundo através de um tunelamento, chamado Listener.
Este objeto vem junto com o client.
2-Depois da base de dados acessível (servidor, local) a próxima coisa que você vai precisar é da classse Connection (DBConnection).
3-Para fazer a connexão você precisa determinar os parâmetros que serão usados como servidor, base de dados,
usuário, senha, tipo de autenticação, etc. O objeto que define esses parâmetros é chamado de string de conexão.
Quando essas informações foram definidas, podemos abrir a conexão com a fonte de dados.
Importante : Nunca se esqueça de fechar a conexão com o banco de dados.
4-Os parâmetros de conexão são : Servidor(Server), Base de dados(Database), Usuário(User), Senha(Password) e o
tipo de segurança envolvida que pode ser integrada com o windows (trusted connection).
Sendo assim um string de conexão pode ser desta maneira:
"Server=xxxx;Database=yyy;Trusted_Connection=true";
"Server=xxxx;Database=yyy;User=zzz,Password=kkk";
"Data Source=xxxx;Initial Catalog=yyy;integrated security=true";
"Data Source=xxxx;Initial Catalog=yyy;trusted_connection=true";
"Data Source=xxxx;Initial Catalog=yyy;UID=zzz,pwd=kkk";
A conexão com o ODBC normalmente utiliza parametros salvos em arquivos .udl(Universal Data Link).
Os arquivos .udl são arquivos tipo texto simples.
Exemplo:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\pasta\arqAccess.mdb;Persist Security Info=False;
É ele que envia o comando ao SQL Server informando o que você deseja fazer com os dados do servidor.
O objeto DBCommand pode enviar os 3 tipos de comandos possíveis para o SQL Server:
Data Manipulation Language(DML) Este é o comando normalmente usado para enviar ou receber infos do servidor SQL. Os comandos DML mais comuns são insert, update e até o delete.
Data Description Language(DDL) É a linguagem usada para modificar a estrutura de tabelas e outros itens do servidor SQL Server. Os comandos DDL mais comuns são o Alter (Database, Table, etc..)
Data Control Language(DCL) São o conjunto de comandos para permitir ou definir o acesso dos usuários ao servidor colo logins, schemas, users, etc.
O objeto DBCommand sempre é dado contra uma conexão já aberta.
O objeto DBCommand tem as propriedades CommandText e CommandType para definir o que deve ser feito e como.
Por exemplo, para chamar uma Stored Procedure o parâmetro CommandText tem que ser exatamente o nome da procedure
a ser chamada (cmd.ConnectionText="userStoredProc") e o parâmetro CommandType deve indicar que o alvo do comando
é uma stored procedure (CommandType=CommandType.StoredProcedure).
Ainda, no caso de Stored Procedures o objeto DBCommand armazena os parâmetros a serem passados para a Stored
Procedure com a sintaxe : cmd.Parameters("campo").Value.
Podemos ter 3 tipos de resultados ao executar uma querie:
1-Não retorna nada além de um Status (ExecuteNonQuerie) : É um comando que ao ser executado no SQL não retorna nenhum
dado.
Como exemplo cito os comandos delete, truncate table x.
2-Retorna um dado apenas (ExecuteScalar) : Acontece quando o SQL Server retorna um dado, apenas uma linha de resposta.
Esta linha única de dados pode ser um número inteiro, um tipo longo ou um string. Como o .NET é uma linguagem
fortemente tipada, o tipo do retorno é critico para não dar erro na execução da querie.
O exemplo típico deste tipo de querie é um Select count(*) from tabela.
3-Retorna um DataSet ( ou RecordSet como era dito antigamente ) : Retorna um conjunto de dados de uma tabela ou de outro elemento que retorna diversos campos e diversas linhas de dados.
Além do tipo do resultado o objeto DBCommand define o acesso as informações e devemos seguir as regras do objeto criado para acessá-las.
1-cmd.ExecuteReader o cursor criado no servidor para este tipo de comando só permite
acessar as informações apenas para leitura, apenas para frente.
Combinando este controle com o DBExecuteReader temos o controle de acesso a dados ideal para preencher
ListBox, DropDownList e GridView desde que se deseje apens ler e não modificar os dados.
1-ListBox Control É um dos controles mais simples e mais fáceis de usar do .NET Framework porque ele
simplesmente exibe o dado, não permite edição ou qualquer outra ação. Possui uma coleção
de itens e cada item desta coleção é chamado de ListItem. O Objeto ListItem tem uma propriedade chamada Text que é
o texto exibido ao usuário e a propriedade Value que é o valor do item que poderá ser enviado de volta
ao servidor num postback.
Exemplo:
<asp:ListBox ID="lstbox1" runat="server" DataSourceID="sqlsrv1" DataTextField="Campo1" DataValueField="Campo2">
</asp:listbox>
2-DropDownList Control Exibe uma lista de opções para que o usuário escolha uma delas.
Também possui uma coleção de itens. Para determinar qual valor foi selecionado temos as propriedades
SelectedValue ou SelectedIndex.
Exemplo:
<asp:DropDownList DataSourceID="SrvSQL1" DataTextField="Campo1" DataValueField="Campo2">
</asp:DropDownList>
3-CkeckBox eRadioButton List Controls São controles muito usados em asp net e podemos associar
eles aos dados retornados do BD. O único inconveniente seria que seria um checkbox ou radiobutton para
cada registro retornado do banco de dados
Exemplo:
<asp:CheckBoxList DataSourceID="SrvSQLx" DataTextField="Campo1" DataValueField="Campo2">
</asp:DropDownList>
4-BulletList Control Este controle pode ser exibido com(ol) ou sem ordem(ul). Através da propriedade
BulletStyle podemos controlar a aparência deste controle(Disc, Circle ou Square).
Infelizmente nem todos os browsers tem esses estilos mas podemos colocar uma imagem no lugar do bullet.
A propriedade bullet style também pode trocar o bullet por números ( romanos, arábicos ), por letras(A a Z-
maiúsculas ou minúsculas) ou mesmo começar a contagem de itens a partir de um número desejado.
São controles que podem exibir os headers dos campos bem como os dados desses campos.
É o mais famoso e versátil item de exibição de dados vindos de bancos de dados. br>
Neste controle podemos mover as colunas para a ordem que desejamos, ordenar, paginar, editar entre
outros recursos.
Lembra muito uma planilha do Excel.
O GridView possui uma coleção de GridViewRow (registros) e GridViewField (campos). O GridViewRow herda as
propriedades do objeto TableRow e o GeidViewField herda as propriedades do objeto cell.
Uma das características mais interessantes deste controle é que possui propriedades para mudar seu
estilo para qualquer tipo que o usuário deseje. Propriedades como GridViewStyle, HeaderViewStyle, FooterStyle,
RowStyle, Alternating-RowStyle(Famoso zebradinho) são padrões que formatam e padronizam os estilos
de acordo com boas sugestões da Microsoft.