C# - Criando e usando um DataSet Tipado
Esta chegando agora ???
Então acompanhe os primeiros artigos:
Se você já conhece VB .NET e esta querendo a aprender C# sugiro que você leia o meu artigo:
Vamos falar um pouco sobre datasets tipados.
Os DataSets podem ser tipados ou não. Um DataSet tipado é um dataset que é derivado de uma classe DataSet e que usa a informação contida em um arquivo de esquema XML ( .xsd ) para gerar uma nova classe. Toda a informação do esquema ( tabelas , colunas, linhas , etc..) é gerada e compilada neste nova classe DataSet. Como esta nova classe é derivada (herdar) da classe DataSet ela assuem toda a funcionalidade da classe DataSet.
Um DataSet não tipado não possui um corresponde arquivo de esquema , ele também possui tabelas , colunas , linhas , etc mas que são expostas somente como uma coleção. Você é quem deverá informar os nomes dos itens presentes nas coleções . Isto pode levar a que os erros sejam detectados somente na hora da compilação. Por exemplo , a linha de código abaixo tem um erro de digitação no nome da tabela que será detectado somente quando você for compilar o código : Ex: dim dt As Datatable = ds.Tables("Prodtos")
Vejamos a seguir a comparação entre dois códigos que acessam dados . Um usa DataSets tipados e outro não tipado:
Usando DataSet tipados | Usando DataSets não tipados |
' Acessando a coluna
CustomerID na 1a linha da tabela Customers
string s = null;
|
string s =
null; s = (string)dsCustomersOrders1.Tables("Customers").Rows(0).Item("CustomerID");
|
Além de ser mais fácil de usar um DataSet tipado permite que você use o recurso da intellisense no seu código ao usar o editor do Visual Studio. É claro que haverá ocasiões que você vai ter que usar um DataSet não tipado .
Vamos criar e usar um DataSet tipado para exibir o resultado de uma consulta SQL no banco de dados Northwind.mdf em uma página ASP .NET. Os recursos usados neste artigo são:
Criando a aplicação web e o DataSet tipado:
Quanto criamos um dataset tipado, o VS cria duas estruturas, o Dataset e o TableAdapter. O dataset tipado é um dataset normal, que expõe propriedades e métodos que tem o mesmo schema (colunas, tipos de dados) da tabela utilizada como origem. Ele herda suas características da classe DataSet. O TableAdaptater é um DataAdapter especializado para uma tabela especifica de um banco de dados. O TableAdapter encapsula em sua estrutura um DataAdapter normal e permite realizar operações diretas com base de dados (via métodos Insert, Update e Delete) e também operações desconectadas através do Dataset tipado.
using System.Data.SqlClient;
Agora vamos incluir no evento Load da página o código abaixo:
protected void Page_Load(object sender, EventArgs e) { SqlConnection cn = new SqlConnection("Data Source=.\\SQLEXPRESS;Initial Catalog=C:\\DADOS\\NORTHWND.MDF;Integrated Security=True"); SqlCommand cmd = new SqlCommand("select * from Products", cn); SqlDataAdapter da = new SqlDataAdapter(cmd); dsProdutos tds = new dsProdutos(); da.Fill(tds, tds.Tables[0].TableName); //exibe no textbox os valores para o primeiro produto: nome e quantidade TextBox1.Text = tds.Products[1].ProductName; TextBox2.Text = tds.Products[1].QuantityPerUnit; gdvProdutos.DataSource = tds; gdvProdutos.DataBind(); } |
Nota: Observe que a string de conexão usa o banco de dados Northwind.mdf anexado.
Como funciona:No procedimento de evento Page_Load, criamos um objeto de conexão passando a seqüência de conexão para o construtor padrão da classe SqlConnection :
SqlConnection cn = new SqlConnection("Data Source=.\\SQLEXPRESS;Initial Catalog=C:\\DADOS\\NORTHWND.MDF;Integrated Security=True");
Criamos um objeto SqlCommand que, em seguida, é passado para o objeto SqlDataAdapter. Passamos então uma instrução SQL e o novo objeto de conexão para o construtor SqlCommand. O primeiro define a propriedade de CommandText do novo objeto SqlCommand. (Você também pode passar o nome de um procedimento armazenado.)SqlCommand cmd = new SqlCommand("select * from Products", cn);
Criamos uma instância
do objeto SqlDataAdapter, passando o novo objeto
SqlCommand para o construtor: SqlDataAdapter da = new SqlDataAdapter(cmd);
A seguir criamos os objetos necessários para se conectar ao banco de dados e retornar informações. Observe que é criada uma instância da classe dsProducts : a classe que mapeia para o esquema dsProducts e herda da classe DataSet ;dsProdutos tds = new dsProdutos();
Chamamos o método Fill do SqlDataAdapter, passando no objeto DataSet tipado, e o nome do DataSet digitado usando a propriedade TableName do objeto DataTable :da.Fill(tds, tds.Tables[0].TableName);
Se você precisar obter o valor de uma coluna da
tabela do dataset para exibir em uma caixa de texto pode usar a propriedade
RowIndex;
dsProducts.DataTableName[RowIndex].ColumnName
Para esse exemplo, o RowIndex usado é igual a 1 indicando o segundo produto. Com o código abaixo iremos exibir o nome e quantidade por unidade nas caixas de texto.
TextBox1.Text = tds.Products[1].ProductName;
TextBox2.Text = tds.Products[1].QuantityPerUnit;
como a coleção de linhas é baseado em zero, quando a página for carregada, observe que os controles TextBox exibem os nomes o nome do produto e a quantidade em estoque do item na segunda linha do GridView .
Para exibir todos os resultados no GridView , defina a propriedade fonte de dados de GridView como o DataSet digitado e chame o método DataBind() :gdvProdutos.DataSource = tds;
gdvProdutos.DataBind();
Abaixo temos o resultado obtido na execução do projeto:
Eu sei é apenas ADO .NET, mas eu gosto...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#