Professional Documents
Culture Documents
Se voc j conhece VB .NET e esta querendo a aprender C# sugiro que voc leia o meu artigo:
O material necessrio para acompanhar o curso : ( Irei utilizar o Visual C# 2008 Express Edition) 1- Visual C# 2008 Express Edition 2- SharpDevelop 2.2 3- SQL Server 2005 Express Edition Todos esses programas so gratuitos e portanto voc no vai gastar um centavo neste curso. Durante o curso vamos desenvolver uma aplicao com acesso a dados usando C# de forma que voc ir fazendo e aprendendo na prtica os principais conceitos bsicos envolvidos. Mas chega de papo e vamos ao que interessa...
http://www.macoratti.net/
http://www.macoratti.net/
Existem duas maneiras bsicas de voc realizar a conexo com uma fonte de dados com ADO .NET:
http://www.macoratti.net/
baseado em XML um conjunto de dados em cache que no esta conectado ao banco de dados independente da fonte de dados Pode armazenar dados em mltiplas tabelas que podem ser relacionadas Armazena mltipla verses de dados para coluna e para cada linha em cada tabela
O DataSet fornece as principais funcionalidades para criar aplicaes para banco de dados desconectados , embora suporte tambm o modelo conectado atravs de leitores de dados ( DataReader). A classe DataSet derivada da classe System.ComponentModel.MarshalByValueComponent da qual ela recebe a habilidade de ser serializada , includa na caixa de ferramentas do VS.NET e visualmente desenhada em um descritor. Os principais mtodos da classe DataSet so :
Membro Colees Relations Tables Mtodos AcceptChanges Clear Clone Descrio Uma coleo de relaes hospedadas em um objeto DataRelationCollection que liga tabelas atravs de chaves estrangeira Uma coleo de tabelas que armazena os dados atuais Grava todas as alteraes para o DataSet Remove todas as linhas de todas as tabelas Faz uma cpia da estrutura mas no os dados de um DataSet
http://www.macoratti.net/
2- Usando um DataReader
Os objetos DataReader uma das maneiras mais fceis para ler os dados retornados pelos objetos Command . Eles permitem acessar e percorrer os registros no modo de somente leitura e somente para frente - forward-only . O DataReader no oferece o acesso desconectado e no permite alterar ou atualizar a fonte de dados original sendo usado para obter rapidamente dados de apenas leitura. Apresenta poucos recursos mas seu desempenho muito melhor do que o oferecido pelos DataSet. As propriedades e mtodos mais usadas dos objetos DataReader so : 1. 2. 3. 4. 5. 6. 7. 8. FieldCount - informa o nmero de colunas da linha de dados atual IsClosed - Indica se o objeto DataReader esta fechado. RecordsAffected - especifica o nmero de linhas alteradas , excludas ou includas na execuo de uma declarao SQL Item (n) - obtm o valor da n-sima coluna no seu formato nativo. Close - Mtodo que fecha o objeto GetName - Mtodo que retorna o nome da n-sima coluna. Read - mtodo que permite ao DataReader avanar para o prximo registro IsDbNull - mtodo que informa se a n-sima coluna possui um valor nulo.
http://www.macoratti.net/
O objeto DataTable
Ao tratar com banco de dados no podemos deixar de pensar em tabelas e o objeto DataTable representa uma ou mais tabelas de dados em memria. Os objetos DataTable esto contidos no objeto DataSet e/ou DataView. Abaixo temos uma relao das principais propriedades do objeto DataTable:
Columns - representa as colunas da tabela atravs da coleo de objetos DataColumn (DataColumnCollection) Rows - representa as linhas da tabela atravs de uma coleo de objetos DataRow (DataRowCollection) PrimaryKey - representa a chave primria da tabela atraves dos objetos DataColumn TableName - define o nome do objeto DataTable via coleo DatatableCollection em um objeto DataSet AcceptChanges - Efetiva as alteraes realizadas no DataTable no banco de dados. NewRow - gera um novo objeto DataRow que representa uma linha de dados Copy - copia os dados e a estrutura do DataTable. Clear - limpa os dados de um DataTable. RejectChanges - ignora as alteraes feitas no DataTable.
O objeto DataView
O DataView tem a funo de permitir a ligao dos dados de uma fonte de dados com a interface do usurio atravs do DataBinding . Atravs do DataView podemos filtrar, ordenar, pesquisar e navegar pelos dados oferecendo diversas vises de um mesmo conjunto de dados ao usurio. Usamos o DataView para mostrar uma viso dos dados contidos em um DataTable , com isto voc pode ter vrios DataViews ligados a um mesmo DataTable , sendo que cada um exibe um viso diferente dos dados. O objeto DataTable possui um DataView padro que acessado atravs da propriedade DefaultView. As principais propriedades do objeto DataView so :
RowFilter - retorna uma expresso usada para filtrar os dados a serem exibidos pelo DataView.
http://www.macoratti.net/
RowStateFilter - Define a verso dos dados que sero exibidos pelo DataView. Oferece as seguintes opes : o CurrendRows - linhas de dados atuais (linhas no alteradas , novas) o Added - linhas de dados novas. o Deleted - Linha excluda pelo mtodo Delete o None - Nenhuma linha o ModifiedCurrent - linhas de dados que foram modificadas - verso atual o OriginalRows - linhas originais o Unchanged - Linhas no modificadas o ModifiedOriginal - linhas de dados que foram modificadas - verso original Count - informa o nmero de linhas no DataView aps a aplicao dos filtros : RowFilter e RowStateFilter Item - obtm uma linha de dados de um tabela especificada. Sort - define a coluna que iro ordenar o DataView e o tipo da ordenao ( ASC - ascendente ou DESC - descendente) Addnew - Inclui uma nova linha no DataView Table - Define qual o objeto DataTable de origem para o DataView Delete - exclui uma linha do DataView Find - Busca por uma linha no DataView
Creio que para um incio j temos muita informao, na sequncia irei mostrar como realizar uma conexo com um banco de dados usando ADO .NET com C#. Eu sei apenas C# mas eu gosto... referncias:
http://www.macoratti.net/
Os requisitos mnimos para que voc aproveite este mini-curso possuir um pouco de conhecimento sobre lgica de programao. Se voc no conhece a linguagem C# pode ler os seguintes artigos :
Se voc j conhece VB .NET e esta querendo a aprender C# sugiro que voc leia o meu artigo:
O material necessrio para acompanhar o curso : (Irei utilizar o Visual C# 2008 Express Edition) 1- Visual C# 2008 Express Edition 2- SharpDevelop 2.2 3- SQL Server 2005 Express Edition
http://www.macoratti.net/
http://www.macoratti.net/
System.Data
System.Data.SqlClient Define classes que trabalham com fonte de dados SQL Server 7.0 ou superior. System.Data.SqlTypes Define classes que representam tipos de dados especficos para o SQL Server.
Disconnected - Classes que fornecem a estrutura bsica para o framework ADO .NET. Ex: A classe DataTable. Os objetos desta classe so capazes de armazenar dados sem qualquer dependncia de um provedor especfico; Shared - Classes que Formam as classes bases para os provedores de dados e so compartilhadas entre todos os provedores; Data Providers - So classes que so usadas com diferentes tipos de fonte de dados para realizar operaes de gerenciamento de dados em um banco de dados especfico.
Os provedores de dados contm objetos Connection, Command, DataAdatper e DataReader que foram apresentados na primeira parte deste artigo.
http://www.macoratti.net/
http://www.macoratti.net/
12
State
http://www.macoratti.net/
http://www.macoratti.net/
Nome do usurio definido no SQL Server. Senha do usurio definida no SQL Server.
Um exemplo de conexo com o meu servidor MAC/SQLEXPRESS usando o banco de dados Northwind.mdf com o usurio macoratti e senha 123456 seria: SqlConnection conn = new SqlConnection("Data Source=MAC/SQLEXPRESS;Initial Catalog=Northwind;User ID=macoratti;Password=123456"); A sequncia de operaes que ocorrem quando da abertura de uma conexo pode ser resumida assim:
Instancia um objeto SqlConnection ou OledbConnection;
http://www.macoratti.net/
Um exemplo completo bem simples pode ser visto a seguir: using System; using System.Data; using System.Data.SqlClient; /// <summary> /// Demonstra como trabalhar abrir uma conexo com SqlConnection /// </summary> class SqlConnectionDemo{ static void Main() { // 1. Instancia a conexo(objeto SqlConnection) SqlConnection conn = new SqlConnection("Data Source=.\\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=SSPI"); // // define um SqlDataReader nulo SqlDataReader dr = null; try { // 2. Abre a conexo
http://www.macoratti.net/
http://www.macoratti.net/
http://www.macoratti.net/
C# - ADO .NET para iniciantes C# - ADO .NET para Iniciantes - III - Command (SqlCommand)
Este um mini-curso sobre ADO .NET para iniciantes usando a linguagem C#. Esta chegando agora ??? Ento acompanhe as dois primeiros artigos:
18
C#- ADO .NET para iniciantes - I C#- ADO .NET para iniciantes - II
Os requisitos mnimos para que voc aproveite este mini-curso possuir um pouco de conhecimento sobre lgica de programao. Se voc no conhece a linguagem C# pode ler os seguintes artigos :
Se voc j conhece VB .NET e esta querendo a aprender C# sugiro que voc leia o meu artigo:
O material necessrio para acompanhar o curso : (Irei utilizar o Visual C# 2008 Express Edition)
http://www.macoratti.net/
Conhecer o que o objeto SqlCommand; Aprender como usar o mtodo ExecuteReader para consultar dados; Aprender como usar o mtodo ExecuteNonQuery para inserir ou excluir dados; Aprender a usar o mtodo ExecuteScalar para retornar um valor nico;
Executa a consulta e no retorna nenhuma coleo. Usado para instrues INSERT, DELETE e UPDATE ExecuteNonQuery onde retorna o nmero de registros afetados. Ex:
http://www.macoratti.net/
20
ExcecuteScalar
Introduo
Um objeto SqlCommand permite que voc especifique qual tipo de interao voc deseja realizar em um banco de dados: selecionar, incluir, modificar e excluir dados e pode ser usado para dar suporte em operaes em um cenrio de gerenciamento de dados no modelo desconectado mas irei focar nesta aula como usar o SqlCommand de forma simples e isolada.
A classe SqlCommand usada para representar uma instruo SQL ou stored procedure disparada com o objetivo de inserir, atualizar, excluir ou selecionar informaes de uma fonte de dados. A sua posio na hierarquia de classes da plataforma .NET dada a seguir: System.Object System.MarshalByRefObject System.ComponentModel.Component System.Data.Common.DbCommand System.Data.Odbc.OdbcCommand System.Data.OleDb.OleDbCommand System.Data.OracleClient.OracleCommand System.Data.SqlClient.SqlCommand System.Data.SqlServerCe.SqlCeCommand
Para criar um objeto SqlCommand podemos usar um construtor criando uma instncia da classe SqlCommand passando a string SQL que representa qual operao desejamos realizar contra o banco de dados e o objeto SqlConnection que dever ter sido criado anteriormente contendo a conexo com a fonte de dados:
http://www.macoratti.net/
C# - ADO .NET para iniciantes SqlCommand cmd = new SqlCommand("select * from Clientes", conn);
21
cmd - instncia da classe SqlCommand select * from clientes - instruo sql para selecionar todos os clientes da tabela Clientes; conn - a conexo com o banco de dados;
1- Consultar dados
Para consultar dados voc usa uma instruo SQL SELECT para retornar um conjunto de dados para visualizao. Para obter este resultado voc pode usar o mtodo ExecuteReader o qual retorna um objeto SqlDataReader da seguinte forma:
// 1. Instancia um novo comando com uma consulta e uma conexo SqlCommand cmd = new SqlCommand("select * from Clientes", conn); // 2. Chama o mtodo ExecuteReader para obter o resultado da consulta SqlDataReader dr = cmd.ExecuteReader();
http://www.macoratti.net/
// prepara um comando SQL para incluir dados usando a instruo INSERT INTO string incluiSQL = @" insert into Clientes (Nome, Email) values ('Macoratti', 'macoratti@ig.com.br')"; // 1. Instancia um novo comando com uma consulta e uma conexo SqlCommand cmd = new SqlCommand(incluiSQL , conn); // 2. Chama o mtodo ExecuteNonQuery para enviar o comando cmd.ExecuteNonQuery();
Aqui alteramos ligeiramente a forma de instanciar um objeto SqlCommand passando a varivel incluiSQL como parmetro. Um detalhe importante que estamos incluindo valores para os campos Nome e Email mas a tabela possui um campo id que a chave primria que no faz parte da instruo. Isto devido ao fato da incluso deste campo ser feita de forma automtica pelo SQL Server. Se voc tentar incluir um valor para o campo id no cdigo ir obter uma exceo em tempo de execuo.
3- Atualizar dados
O mtodo ExecuteNonQuery tambm usado para atualizao de dados:
http://www.macoratti.net/
4- Excluir dados
O mtodo ExecuteNonQuery tambm usado para excluir dados:
// prepara um comando SQL para incluir dados usando a instruo DELETE string excluiSQL = @"delete from Clientes where id = 1";
http://www.macoratti.net/
5- Obtendo valores
s vezes tudo o que voc precisa do banco de dados um valor nico que pode ser o resultado de uma contagem, soma, mdia, ou outro valor agregado. Usar um ExecuteReader e calcular o resultado no seu cdigo no a forma mais eficiente de fazer isso. A melhora maneira deixar o banco de dados realizar a operao e retornar apenas um valor nico como resultado. Para isso usamos o mtodo ExecuteScalar:
http://www.macoratti.net/
25
http://www.macoratti.net/
26
A seguir um exemplo realizando as operaes CRUD na tabela Clientes do banco de dados Cadastro.mdf:
using System; using System.Data; using System.Data.SqlClient; class ExecutaInsertUpdateDelete { public static void exibirRegistro(SqlCommand comando, string ID) { comando.CommandText ="SELECT codigo, nome FROM Clientes WHERE codigo = '" + ID + "'"; SqlDataReader dr = comando.ExecuteReader(); while (dr.Read())
http://www.macoratti.net/
27
http://www.macoratti.net/
28
Obs: Recursos gerenciados so descartados pela coletor de lixo .NET Framework (GC) sem qualquer codificao extra de sua parte. Voc no precisa de um bloco Using para recursos gerenciados. Veja abaixo um exemplo de bloco Using para criar uma tabela em um banco de dados; a string de conexo esta sendo obtida a partir do arquivo de configurao
using (SqlConnection con = new SqlConnection(Macoratti.Properties.Settings.Default.MacorattiConnectionString)) { con.Open(); try { using (SqlCommand command = new SqlCommand("CREATE TABLE Macoratti (Codigo INT, Nome TEXT, Endereco TEXT)", con)) { command.ExecuteNonQuery(); }
http://www.macoratti.net/
29
Outro exemplo usando Using e comparando com a sintaxe tradicional sem usar Using:
SqlConnection cn = null; SqlCommand cm = null; using (SqlConnection cn = new SqlConnection(connectionString)) { using (SqlCommand cm = new SqlCommand(commandString, cn)) { cn.Open(); cm.ExecuteNonQuery(); } } try { cn = new SqlConnection(connectionString); cm = new SqlCommand(commandString, cn); cn.Open(); cm.ExecuteNonQuery(); } finally { if (null != cm); cm.Dispose(); if (null != cn) cn.Dispose(); }
Os dois trechos de cdigo acima so equivalentes.No prximo artigo irei falar sobre o objeto SqlDataReader
http://www.macoratti.net/
C# - ADO .NET para iniciantes C# - ADO .NET para iniciantes IV - DataReader (SqlDataReader)
30
http://www.macoratti.net/
C#- ADO .NET para iniciantes - II C#- ADO .NET para iniciantes - III
31
O objeto DataReader da ADO .NET pertence ao namespace System.Data e apresenta as seguintes especificidades:
Acessa as informaes em uma fonte de dados de forma mais rpida; usado somente para exibir rapidamente as informaes de uma base de dados; Seus dados obtidos so somente leitura e possvel somente caminhar para frente na navegao pelos dados; Ele exige que a conexo esteja aberta enquanto estiver sendo usado e reflete o estado mais atualizado possvel dos dados;
Voc vai encontrar na leitura tcnica a designao de que o um DataReader forward-only (somente para frente) e read-only (somente-leitura). O resultado gerado por um DataReader retornado pela execuo da consulta e armazenada no buffer da rede no cliente at que seja requisitado atravs do mtodo Read(). Resumindo as funcionalidades do DataReader: - um objeto somente leitura e para frente, ou seja, no voc no pode navegar aleatoriamente; - Opera conectado ao banco, assim, enquanto estivermos utilizando-o para obter os dados do banco, estaremos com a conexo do banco aberta; - Opera apenas com uma tabela por vez; voc deve configurar a string SQL para a primeira tabela, conectar no banco, coletar suas informaes e desconectar do banco. Para a segunda tabela voc dever repetir o processo; Nota: A conexo utilizada pelo DataReader deve ser aberta e fechada manualmente.( exceto quando voc informa que ela dever ser fechada de forma automtica usando a enumerao CommandBehavior.CloseConnection)
Voc deve usar um DataReader em sua aplicao quando:
Voc
http://www.macoratti.net/
32
Nota: O DataAdapter usa o DataReader par preencher o DataSet. Desta forma , o desempenho ganho pela utilizao do DataReader que voc salva na memria os dados que o DataSet ir consumir.
criar uma instncia de um objeto Command; criar um objeto DataReader(); chamar o mtodo ExecuteReader do objeto Command(); Obter o retorno da consulta usando o mtodo Read();
http://www.macoratti.net/
33
Observe as linhas em negrito onde temos: 1-) A criao de um objeto SqlCommand usando uma instruo SQL e a conexo SqlCommand adoCmd = new SqlCommand(sql, adoConn); 2-) A criao de um objeto SqlDataReader e utilizao do mtodo ExecuteReader() do objeto SqlCommand; SqlDataReader adoDR = adoCmd.ExecuteReader(); 3-) Utilizao do mtodo Read() para ler o resultado while (adoDR.Read()) Veja a seguir outra forma de obter o mesmo resultado:
http://www.macoratti.net/
34
Observe que abrimos uma conexo com a fonte de dados e aps executar a consulta usando o mtodo ExecuteReader() atribumos o resultado ao objeto SqlDataReader dr.
http://www.macoratti.net/
35
O objeto SqlDataReader possui alguns mtodos para obter os dados das colunas como: GetString(), GetValue(), getDateTime(), GetDouble(), GetChar(), GetGuid(), GetInt16(), GetInt32(), etc..
Cada um destes mtodos usa um valor inteiro como ndice baseado em zero e representa a coluna a ser obtida. Assim dr.GetString(0) retorna o valor da primeira coluna. Para detalhes veja o link: http://msdn.microsoft.com/enus/library/system.data.sqlclient.sqldatareader_members.aspx No primeiro exemplo antes de iniciarmos o lao e a leitura do DataReader usamos o mtodo HasRows que usado para verificar se existem linhas no DataReader, se existir ele retorna True, se no retorna False e neste caso nem iniciaremos a leitura do mesmo. O enumerador CommandBehavior possui o item CloseConnection() que pode ser usado com o mtodo ExecuteReader do objeto SqlCommand() da seguinte forma:
dr = comando.ExecuteReader(CommandBehavior.CloseConnection)
neste caso estamos passando o CommandBehavior.CloseConnection() como parmetro para o objeto ExecuteReader e com isso no temos a necessidade de fechar a conexo explicitamente com a fonte de dados, pois ao percorrer os dados o prprio DataReader ir fechar a conexo quando o mtodo Close() do DataReader for chamado.
http://www.macoratti.net/
36
dr = comando.ExecuteReader(CommandBehavior.CloseConnection);
while (dr.Read()) { Console.WriteLine(dr.GetString(1)); } } catch (Exception ex) { Console.WriteLine("Erro."); } finally {
dr.Close();
} }
http://www.macoratti.net/
Visual C# 2008 Express Edition - para criar o projeto da aplicao C#; SQL Server 2005 Express Edition - para gerenciar o banco de dados Northwind.mdf; Criao de consultas parametrizadas - definindo parmetros na instruo SQL; Utilizao do mtodo ExecuteReader - executando a instruo SQL que o objeto Command representa e retornando o objeto DataReader;
Abra o Visual C# Express Edition e crie um novo projeto do tipo Windows Application com o nome uDataReader; A seguir no formulrio padro inclua os controles : Label, Button - btnProcurar , ListBox - lbDados e TextBox - txtcriterio conforme o leiaute abaixo:
http://www.macoratti.net/
Agora defina o namespace : using System.Data.SqlClient; No evento Click do boto de comando Procurar insira o seguinte cdigo: private void btnProcurar_Click(object sender, EventArgs e) { //define os objetos DataReader, Connection e Command SqlDataReader sqldr = null; SqlConnection con = null;
http://www.macoratti.net/
http://www.macoratti.net/
Note que estamos usando o parmetro @criterio para receber o valor informado na caixa de texto na instruo de comando SQL :
http://www.macoratti.net/
uDataReader.zip
http://www.macoratti.net/
42
http://www.macoratti.net/
43
Conclumos assim esta apresentao sobre o objeto DataReader e sua utilizao com o SqlDataReader. No prximo artigo irei falar sobre o objeto SqlDataAdapter e DataSet.
http://www.macoratti.net/
C# - ADO .NET para iniciantes C# - ADO .NET para iniciantes IV - SqlDataAdapter e DataSet
44
http://www.macoratti.net/
C#- ADO .NET para iniciantes - II C#- ADO .NET para iniciantes - III C#- ADO .NET para iniciantes - IV
45
Se voc j conhece VB .NET e esta querendo a aprender C# sugiro que voc leia o meu artigo:
O material necessrio para acompanhar o curso : ( Irei utilizar o Visual C# 2008 Express Edition) 1- Visual C# 2008 Express Edition (vou dar preferncia ao Visual C#) 2- SharpDevelop 2.2 (opcional) 3- SQL Server 2005 Express Edition No artigo anterior escrevemos sobre o DataReader, e, embora o objeto DataReader seja rpido e muito simples de usar, em muitas situaes, teremos que efetuar operaes em nossos dados que vo alm da exibio e movimentao somente para frente; muitas vezes teremos que realizar operaes de incluso, alterao, excluso, etc., e, neste caso as classes DataSet e SqlDataAdapter so as mais indicadas para serem usadas.
A classe DataSet
O DataSet representa um conjunto de dados em memria retornados de uma fonte de dados e consiste de uma coleo de objeto DataTable que voc pode inter-relacionar usando os objetos DataRelations. Voc tambm pode forar a integridade dos dados em um DataSet usando os objetos UniqueConstraints e ForeignKeyConstraints.
Um DataSet essencialmente um banco de dados em memria, contendo mltiplas tabelas, constraints, consultas, ordenaes e a habilidade de persistir o seu estado em um arquivo XML. Voc pode usar um SqlDataAdapter para preencher um DataSet com linhas de uma consulta feita em um banco de dados SQL
http://www.macoratti.net/
46
Os dados esto contidos essencialmente no objeto DataTable mas a coleo DataRelationCollection que permite que voc a hierarquia da tabela. As tabelas esto contidas na coleo DataTableCollection que acessada atravs da propriedade Tables.
Lembre-se que ao usar um DataSet voc esta trabalhando com uma cpia dos dados em memria e por isso qualquer atualizao feita nos dados tem que ser refletida na fonte de dados de origem, de outra forma , se voc no atualizar os dados originais com as alteraes a fonte de dados no ser atualizada. Os dados internos contidos em um DataSet so mantidos no formato XML e a estrutura do DataSet definida pelo XSD (XML Schema Definition Language), ou seja, XML e DataSet esto intimamente ligados.
http://www.macoratti.net/
A classe SqlDataAdapter
A classe SqlDataAdapter serve como uma ponte entre o DataSet e o banco de dados SQL Server para retornar e salvar dados. O SqlDataAdapter fornece esta ponte da seguinte forma:
1. O mtodo Fill que altera os dados no DataSet para coincidir com os dados da fonte de dados; Quando o mtodo Fill executado ele cria as colunas e tabelas necessrias para os dados retornados se eles no existirem; a informao da chave primria no includa a menos que a propriedade MissingSchemaAction for definida para AddWithKey. 2. O mtodo Update o qual altera os dados na fonte de dados para coincidir com os dados do DataSet usando o comando T-SQL apropriado contra a fonte de dados. A atualizao feita da seguinte forma: para cada linha inserida, modificada e deletada o mtodo Update determina o tipo de alterao que foi realizada (Insert, Update ou Delete) e dependendo do tipo de alterao, o comando Insert, Update ou Delete executado para propagar a linha modificada para a fonte de dados.
http://www.macoratti.net/
Criando um DataSet
Todos as classes relacionadas como DataSet, DataAdapter, DataTable, DataRow etc esto disponveis no namespace System.Data. A primeira coisa a fazer definir o namespace que pode ser feito da seguinte forma:
Em uma pgina ASP .NET
Em um arquivo C#:
Para criar um objeto DataSet voc usa a seguinte sintaxe: DataSet <nomedoDataSet> = new DataSet();
Criando um SqlDataAdater
http://www.macoratti.net/
O objeto SqlDataAdapter no gera automaticamente comandos Transact-SQL necessrios para ajustar as alteraes feitas a um DataSet associado com uma instncia do SQL Server. Voc pode , no entanto, criar um objeto SqlCommandBuilder para gerar automaticamente estes comandos para atualizaes em uma tabela nica . Veja abaixo um exemplo : SqlCommandBuilder cmdBldr = new SqlCommandBuilder(daClientes);
O comando SqlCommandBuilder instanciado usando como parmetro a instncia do SqlDataAdatper, no caso daClientes, dessa forma o SqlCommandBuilder ir ler os comandos SQL e atribuir os novos comandos as propriedades Insert, Update e Delete do SqlDataAdapter. o SqlCommandBuilder tem a limitao de gerar os comandos apenas para uma nica tabela, se voc precisar trabalhar com mais de uma tabela ou usar um Join ter que usar as propriedades da classe SqlDataAdapter.
http://www.macoratti.net/
daClientes.Fill(dsClientes, "Clientes");
O mtodo Fill , usa dois parmetros :
um DataSet - O DataSet precisa ser instanciado antes voc tentar preench-lo com dados; o nome de uma tabela - A tabela que ser criada no DataSet. Voc pode usar qualquer nome.
Nota: O mtodo Fill possui uma sobrecarga que usa somente o DataSet; neste caso a tabela criada ter um nome padro de "table1" para a primeira tabela.
banco de dados Northwind.mdf do SQL Server 2005 Express Edition ; conexo definida no meu Servidor SQL Server MAC\SQLEXPRESS (para adaptar o exemplo para o seu caso mude a string de conexo); Visual C# 2008 Express Edition;
http://www.macoratti.net/
51
//exibe o dataset no controle datagridview - dgvProdutos dgvProdutos.DataSource = dsProdutos; dgvProdutos.DataMember = tabela; } - A rotina IniciaDados() possui o seguinte cdigo: // definio dos objetos dataset, sqldataadapter e sqlcommandbuilder public void IniciaDados() {
http://www.macoratti.net/
52
http://www.macoratti.net/
2- Usando um DataSet com SqlDataAdapter para incluir, alterar e excluir dados no SQL Server
Vamos usar o exemplo anterior e incluir no formulrio mais 3 botes de comandos para incluir, alterar e excluir dados da tabela Products;
http://www.macoratti.net/
Incluir - btnIncluir
Vamos definir a varivel do codigo como do tipo String que ir armazenar o cdigo do produto. private String codigo = ""; A seguir temos o cdigo do boto - Listar Dados - que aps obter a lista de produtos habilita os botes de comando:
private void btnPreencheGrid_Click(object sender, EventArgs e) { IniciaDados(); //exibe o dataset no controle datagridview - dgvProdutos dgvProdutos.DataSource = dsProdutos; dgvProdutos.DataMember = tabela;
http://www.macoratti.net/
55
No evento Click do boto Incluir temos o cdigo que inclui um novo registro na tabela Products. Estamos usando o mtodo NewRow() e incluindo uma nova linha na tabela; Estou incluindo um produto com o nome Macoratti_ Estamos usando o procedimento bsico para incluir dados em um dataset : criando uma nova linha e em seguida adicionando a coleo DataRow do DataTable no DataSet No nosso caso estamos fazendo isso em um DataSet no tipado chamando o mtodo NewRow para criar uma nova linha vazia; esta linha herda a estrutura da coluna da coleo DataColumnCollection. Em seguida inclumos(add) a linha na coleo de linhas e atualizamos(update) o dataset.
private void btnIncluir_Click(object sender, EventArgs e) { daProdutos = new SqlDataAdapter("SELECT ProductID, ProductName FROM Products", conn); SqlCommandBuilder cmdbldr = new SqlCommandBuilder(daProdutos); dsProdutos = new DataSet(); daProdutos.Fill(dsProdutos); DataRow registro = dsProdutos.Tables[0].NewRow(); registro["ProductName"] = "Macoratti_"; dsProdutos.Tables[0].Rows.Add(registro); //atualiza o dataset daProdutos.Update(dsProdutos); MessageBox.Show("Registro incluido."); }
http://www.macoratti.net/
56
O cdigo do evento Click do boto Excluir visto a seguir. - No cdigo obtemos o valor do cdigo do produto a partir da linha selecionada no DataGridView e armazenamos na varivel codigo;
http://www.macoratti.net/
57
http://www.macoratti.net/
Com isso mostrei os procedimentos bsicos de como atualizar um dataset no tipado usando ADO .NET; Pegue o projeto completo aqui : uDataSet1.zip
No prximo artigo irei falar mais um pouco sobre dataset , mais particularmente dos datasets tipados
http://www.macoratti.net/