Introdução
Conceitos Iniciais:
Campo – Um campo é uma informação acerca de algo ou de alguém. O nome de uma pessoa, o código de um produto, o número de uma cédula de identidade são exemplos de campos.
Registro – Registro é um conjunto de campos pertencentes, ou de alguma forma ligado, ao mesmo algo ou ao mesmo alguém. Uma cédula de identidade, a página de uma agenda pessoal; são bons exemplos de registros.
O aspecto visual de um registro pode ser entendido como um retângulo horizontal subdividido por campos.
|
Exemplo: Registro que contém as informações básicas de uma pessoa.
Tabela – Uma tabela é um conjunto de registros semelhantes, de mesma natureza (registros com os mesmos campos). Uma agenda telefônica é um bom exemplo de tabela.
O aspecto visual da tabela é disposto da seguinte maneira: Toda tabela tem um registro vazio no início e outro no fim. Estes registros são chamados de BOF e EOF respectivamente.
BOF | ||||
Campo1 |
Campo2 |
... |
Campo(N) | |
|
|
... |
Registros Válidos | |
|
|
... |
| |
|
|
... |
| |
|
|
... |
| |
|
|
... |
| |
EOF |
Banco de Dados – Simplificando bem a definição, podemos dizer que Banco de Dados é um conjunto de tabelas relacionadas entre si, ou seja, é um conjunto de tabelas, parte de um mesmo sistema. Todas as agendas que compõem o material de trabalho de uma secretária forma o seu banco de dados (Agenda de telefones, compromissos, reuniões, etc).
Os bancos são representados por cilindros, devido a sua finalidade se assemelhar bastante a de um disco rígido.
Aplicativos de Banco de Dados
São ferramentas que criam, manipulam e administram banco de dados. Estas ferramentas são geralmente classificadas por porte, que considera a capacidade de armazenamento, e o total de acesso em rede.
Exemplos de Pequeno Porte: Access, Dbase, Paradox, Approach, etc.
Exemplos de Grande Porte: Interbase, Oracle, SQL Server, Informix, DB2, Ingless 2, etc.
Front-end e Back-end
É uma metodologia de programação com banco de dados em duas camadas onde o banco (back-end) é produzido e mantido por uma ferramenta específica de banco, e o aplicativo que manipula o banco e promove uma interface amigável com o usuário é feito por uma linguagem de programação. Em aplicativos comerciais simples essa metodologia se tornou famosa com a dobradinha Clipper e Dbase.
É fácil perceber que para o funcionamento desta metodologia é necessário que haja uma comunicação entre o banco e o aplicativo. Essa comunicação é feita por dispositivos de sistema conhecidos como drivers.
A indústria de software não perdeu tempo em produzir seus drivers. Existem hoje diversos pacotes com drivers que acessam os mais diferentes bancos de dados. O mais famoso e, possivelmente o mais antigo é o pacote ODBC. Temos também os pacotes ADO, ADO.NET, JET, BDE, JDBC e outros.
A técnica de utilização do driver é feita pela linguagem, e a nível prático é um processo bastante simples:
1º Cria-se um objeto que fará comunicação com o banco utilizando um driver específico;
2º Cria-se um objeto que funciona como “transporte de rotinas de bancos” (os bancos na sua imensa maioria utilizam uma linguagem padrão de manipulação chamada SQL).
3º Em caso de pesquisa é criado um objeto específico para ser um container de dados. Em outras palavras é criada na linguagem uma pseudo tabela.
Banco de Dados com ASP.NET
O Asp.Net, utilizando a nova padronização do C# para conexão de banco de dados, trabalha basicamente com dois grupos de controles. Um grupo específico para o banco SQL Server e um outro grupo para o padrão OLEDB (padrão ADO.NET). Enquanto o primeiro é específico para um único banco (o SQL Server), o outro pode ser utilizado para fazer conexões com os mais diversos bancos de dados do mercado, inclusive o próprio SQL Server. Utilizaremos o padrão OleDb para acessar o MS Access.
Como vimos anteriormente, trabalhar com banco de dados é basicamente interligar de duas camadas (Back-end e Front-end). Os objetos necessários para tal processo são: OleDbConnection, OleDbDataAdapter e DataSet.
OleDbConnection -Se alia ao driver especificado e realiza uma conexão com o banco.
OleDbDataAdapter - Cria o objeto de transporte para as rotinas especificas do banco.
DataSet - Este será o nosso container dados (pseudo tabela).
|
Não podemos esquecer, que cada elemento de acesso ao banco são objetos criados a partir de suas respectivas classes. Portanto, quando fazemos a utilização temos que ter em mente que o primeiro passo é sempre criar os objetos necessários. É lógico que os objetos de Banco pertencem a um pacote específico que deve ser declarado antecipadamente. No caso do OleDb o pacote é System.Data.OleDb.
Vejamos a parte prática de acesso à banco no ASPNET:
1º Passo: Crie um objeto do tipo OleDbConnection.
2º Passo: Crie o objeto OleDbAdapter para impor a rotina ao banco (não esqueça que a rotina é feita basicamente em comandos da linguagem SQL).
3º Passo: Se houver necessidade utilize o objeto DataSet como container de dados.
Um exemplo seria:
OleDbConnection con = new OleDbConnection (“Especificação do banco e o driver utilizado”);
OleDbDataAdapter ad = new OleDbDataAdapter(“rotina SQL”, con);
DataSet ds = new DataSet();
ad.Fill(ds); //está rotina coloca os dados obtidos pela rotina dentro do DataSet que é na verdade uma pseudo tabela
É claro que para exibir as informações para o usuário final é necessário utilizar um controle Html ou ASPNET.
Os controles ASP.NET possuem uma propriedade DataSource que recebe especificamente a fonte de dados criada (neste caso o Dataset montado pelo OleDbDataAdapter). Existe uma diferença em receber os dados e mostrá-los. Ao associar o DataSource o objeto apenas recebeu, porém ainda não exibiu. O processo de exibir os dados é feito pelo método DataBind().
Vejamos um exemplo mais prático:
Levaremos em consideração uma tabela de nome tabcarros e com os campos sendo placa chave primária, marca tipo texto, modelo tipo texto.
Consultar:
<%@ Page Language="C#" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">
void Page_Load(object sender, EventArgs e) {
//definir a string SQL
string sql = "SELECT * FROM tabcarros";
// definir conexão
OleDbConnection con = new OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Documents and Settings\\administrador\\Desktop\\1 aula c#\\Carros.mdb;Persist Security Info=False");
//abrir a conexão
con.Open();
//criar o data DataAdapter e executar a consulta
OleDbDataAdapter ad = new OleDbDataAdapter(sql,con);
//criar o DataSet
DataSet ds = new DataSet();
//Preencher o dataset com o data DataAdapter
ad.Fill(ds);
//DataView dv = new DataView(ds.Tables[0]);
//ligando dataset ao controle asp.net
DataGrid1.DataSource= ds.Tables[0];//dv;
// visualizando dados no controle
DataGrid1.DataBind();
//liberando objetos
con.Dispose();
ad.Dispose();
ds.Dispose();
}
</script>
<html>
<head>
</head>
<body>
<form runat="server">
<asp:DataGrid id="DataGrid1" runat="server"></asp:DataGrid>
</form>
</body>
</html>
Inserir:
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">
void Button1_Click(object sender, EventArgs e) {
string placa = TextBox1.Text;
string marca = TextBox2.Text;
string modelo= TextBox3.Text;
string sql = "Insert into tabcarros (placa,marca,modelo) Values ("+ placa +" ," + marca + "," + modelo + " )";
string conx= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Documents and Settings\\administrador\\Desktop\\1 aula c#\\Carros.mdb;Persist Security Info=False";
OleDbConnection con = new OleDbConnection (conx);
con.Open();
OleDbDataAdapter ad = new OleDbDataAdapter(sql,con);
DataSet ds = new DataSet();
ad.Fill(ds);
con.Dispose();
ad.Dispose();
ds.Dispose();
}
</script>
<html>
<head>
</head>
<body>
<form runat="server">
<p>
<strong>Produtos</strong>
</p>
<p>
placa :<asp:TextBox id="TextBox1" runat="server" Width="227px"></asp:TextBox>
</p>
<p>
marca<asp:TextBox id="TextBox2" runat="server" Width="232px"></asp:TextBox>
</p>
<p>
modelo:<asp:TextBox id="TextBox3" runat="server" Width="225px"></asp:TextBox>
</p>
<p>
<asp:Button id="Button1" onclick="Button1_Click" runat="server" Text="Enviar"></asp:Button>
</p>
<!-- Insert content here -->
</form>
</body>
</html>
Excluir:
<%@ Page Language="C#" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">
// Insert page code here
void Button1_Click(object sender, EventArgs e) {
string placa = TextBox1.Text;
string sql = "delete from tabcarros where placa="+ placa +"";
OleDbConnection con = new OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Documents and Settings\\administrador\\Desktop\\1 aula c#\\Carros.mdb;Persist Security Info=False");
con.Open();
OleDbDataAdapter ad = new OleDbDataAdapter(sql,con);
DataSet ds = new DataSet();
ad.Fill(ds);
con.Dispose();
ad.Dispose();
ds.Dispose();
}
</script>
<html>
<head>
</head>
<body>
<form runat="server">
placa >>>>><asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
<asp:Button id="Button1" onclick="Button1_Click" runat="server" Width="77px" Text="deletar"></asp:Button>
<!-- Insert content here -->
</form>
</body>
</html>
Alterar:
<%@ Page Language="C#" Debug="True" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">
void Page_Load(object sender, EventArgs e) {
string sql = "SELECT * FROM tabcarros";
OleDbConnection con = new OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Documents and Settings\\administrador\\Desktop\\1 aula c#\\Carros.mdb;Persist Security Info=False");
con.Open();
OleDbDataAdapter ad = new OleDbDataAdapter(sql,con);
DataSet ds = new DataSet();
ad.Fill(ds);
DataGrid1.DataSource= ds.Tables[0];
DataGrid1.DataBind();
con.Dispose();
ad.Dispose();
ds.Dispose();
}
void Button1_Click(object sender, EventArgs e) {
string placa = TextBox1.Text;
string marca = TextBox2.Text;
string modelo= TextBox3.Text;
string sql = "update tabCarros set marca=" + marca + ", modelo=" + modelo + " where placa=" + placa + "";
OleDbConnection con = new OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Documents and Settings\\administrador\\Desktop\\1 aula c#\\Carros.mdb;Persist Security Info=False");
con.Open();
OleDbDataAdapter ad = new OleDbDataAdapter(sql,con);
DataSet ds = new DataSet();
ad.Fill(ds);
con.Dispose();
ad.Dispose();
ds.Dispose();
}
void Button2_Click(object sender, EventArgs e) {
}
</script>
<html>
<head>
</head>
<body>
<form runat="server">
placa :<asp:TextBox id="TextBox1" runat="server" Width="155px"></asp:TextBox>
<p>
marca<asp:TextBox id="TextBox2" runat="server" Width="157px"></asp:TextBox>
</p>
<p>
modelo:<asp:TextBox id="TextBox3" runat="server" Width="147px"></asp:TextBox>
<asp:DataGrid id="DataGrid1" runat="server"></asp:DataGrid>
</p>
<p>
<asp:Button id="Button1" onclick="Button1_Click" runat="server" Width="84px" Text="aterar"></asp:Button>
<asp:Button id="Button2" onclick="Button2_Click" runat="server" Width="84px" Text="visualizar"></asp:Button>
</p>
</form>
</body>
</html>
Exercício:
Montar uma aplicação que insira, exclua, altere, visualize.
O Objeto DataView
Ele faz ponte entre o objeto DataSet e uma aplicação onde serão exibidos os dados.
Visão geral do processo:
Ex01
<%@ Page Language="C#" Debug="True" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">
// Insert page code here
//
void Page_Load(object sender, EventArgs e) {
//definir a string SQL
string sql = "SELECT * FROM tabcarros";
// definir conexão
OleDbConnection con = new OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Documents and Settings\\administrador\\Desktop\\1 aula c#\\Carros.mdb;Persist Security Info=False");
//abrir a conexão
con.Open();
//criar o data adapter e executar a consulta
OleDbDataAdapter ad = new OleDbDataAdapter(sql,con);
//criar o DataSet
DataSet ds = new DataSet();
//Preencher o dataset coom o data adapter
ad.Fill(ds);
//ligando dataset ao DataView
DataView dv = new DataView(ds.Tables[0]);
string sele = Classificar.SelectedItem.Value;
switch (sele)
{
//Sort é a propriedade do DataView que retorna ou define informações sobre
// colunas e ordem dos dados
case "placa":
{
if (Crescente.Checked)
dv.Sort= "placa ASC";
else
dv.Sort= "placa DESC";
break;
}
case "marca":
{
if (Crescente.Checked)
dv.Sort= "marca ASC";
else
dv.Sort= "marca DESC";
break;
}
case "modelo":
{
if (Crescente.Checked)
dv.Sort= "modelo ASC";
else
dv.Sort= "modelo DESC";
break;
}
}
// Count retorna o numero de registros de um DataView
Label1.Text= "N°:";
int numregistro = dv.Count;
Label1.Text += numregistro.ToString() ;
//ligando DataView ao controle asp.net
DataGrid1.DataSource= dv;
// visualizando dados no controle
DataGrid1.DataBind();
//liberando objetos
con.Dispose();
ad.Dispose();
ds.Dispose();
}
</script>
<html>
<head>
</head>
<body>
<form runat="server">
<p>
<asp:DataGrid id="DataGrid1" runat="server" BackColor="Silver" BorderColor="Black" ShowFooter="True">
<HeaderStyle border backcolor="#404040"></HeaderStyle>
</asp:DataGrid>
<asp:ListBox id="Classificar" runat="server" Width="100px" Rows="1">
<asp:ListItem Value="placa" Selected="True">placa</asp:ListItem>
<asp:ListItem Value="marca">marca</asp:ListItem>
<asp:ListItem Value="modelo">modelo</asp:ListItem>
</asp:ListBox>
<asp:Button id="Button1" runat="server" Text="classificar"></asp:Button>
</p>
<p>
<asp:RadioButton id="Crescente" runat="server" Text="Crescente" GroupName="x"></asp:RadioButton>
<asp:RadioButton id="Decrescente" runat="server" Text="Decrescente" GroupName="x"></asp:RadioButton>
<asp:Label id="Label1" runat="server"></asp:Label>
</p>
</form>
</body>
</html>