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;
    s = dsCustomersOrders1.Customers(0).CustomerID;

 

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:

  • Inicie o Visual Web Developer 2008 Express(VWD);
  • No menu File -> New Web Site , selecione o template ASP .NET Web Site, a linguagem C# e informe o nome u_dsTipado;
  • Na janela Solution Explorer é exibido selecione o arquivo Default.aspx clicando duas vezes sobre o mesmo;
  • Na janela do Editor do VWD , clique em Design para alternar para o modo de design;
  • A partir da caixa de ferramentas inclua no formulário os seguintes controles (arraste e solte):
  • TextBox - ID= txtNomeProduto
  • TextBox - ID= txtNomeCategoria
  • DataGridView = dgvDS
  • Label - Text=Produto
  • Label - Text=Categoria
  • Vamos adicionar um DataSet ao projeto, a partir do menu WebSite->Add New Item, selecione o modelo DataSet e altere o seu nome para : dsProducts.xsd. Observe que o arquivo é na verdade, um esquema XML. Clique em Add . Você verá uma janela solicitando a confirmação para salvar o arquivo na pasta App_Code. Confirme e após isso você verá a página em branco na janela do editor DataSet;
  •    

  • Vamos abrir o DataBase Explorer e selecionar a conexão com o banco de dados Northwind.mdf;
  • Selecione o objeto Tables e selecione e arraste a tabela Products para o editor DataSet; Uma representação visual do conjunto de resultados que é gerado pelo modo de exibição será exibida na página. Para ver o XML real para o arquivo de esquema, clique no botão XML na janela do editor.
  • 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.

     

  • Você pode ver que cada uma das colunas da tabela é representada como uma propriedade. O DataSet tipado não gerou uma classe, mas uma definição XML do que a classe irá conter; se você selecionar a opção View Code a partir do menu verá a definição do XML gerado.
  • Para escrever código para exibir o DataSet, clique duas vezes diretamente no formulário da Web. O  Code-behind do formulário Web irá mostrar o evento Page_Load onde iremos incluir o código;
  • Para ter acesso as classes que residem no namespace System.Data.SqlClient, adicione a seguinte instrução using na parte superior do code-behind:
  •           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:


    José Carlos Macoratti