Você está na página 1de 39

WORKSHOPS CTXML

INTRODUÇÃO AO .NET
LABORATÓRIO 05
Acesso a dados usando o ADO.NET (C#)

Data de revisão: Fevereiro de 2004


As informações neste documento estão sujeitas a alterações sem aviso prévio. Os exemplos de companhias,
organizações, produtos, pessoas, e eventos utilizados neste documento são fictícios. Nenhuma associação com
qualquer companhia, organização, produto, pessoa ou evento reais deve ser entendida como inferida. Respeito a
qualquer lei aplicável de direito de cópia é de inteira responsabilidade do usuário. Sem limitar os direitos sobre a
obra, nenhuma parte deste documento pode ser reproduzida, armazenada ou introduzida em um sistema de
armazenamento, ou transmitida em nenhuma forma ou por nenhum meio (eletrônico, mecânico, fotocópia,
gravação ou qualquer outro), ou por qualquer motivo, sem expressa permissão por escrito de Microsoft
Corporation.

Microsoft pode ter patentes, pedidos de patentes, marcas registradas, ou outro direito de propriedade intelectual
cobrindo os assuntos em questão deste documento. Exceto quando expressamente fornecido em qualquer
acordo de licença por escrito da Microsoft, a fabricação deste documento não te dá nenhuma licença a estas
patentes, marcas registradas, direito sobre a obra, ou outra propriedade intelectual.

©2006 Microsoft Corporation. Todos os direitos reservados.

Microsoft, MS-DOS, MS, Windows, Windows NT, MSDN, Active Directory, BizTalk, SQL Server, SharePoint,
Outlook, PowerPoint, FrontPage, Visual Basic, Visual C++, Visual J++, Visual InterDev, Visual SourceSafe,
Visual C#, Visual J#, e Visual Studio são todos marcas registradas ou marcas de Microsoft Corporation nos
Estados Unidos e/ou outros países.

Outros nomes de produtos e empresas descritos aqui podem ser marcas registradas de seus respectivos donos.

Página i de 34
Índice

LAB 05: ACESSO A DADOS USANDO O ADO.NET – C#......................................................................................1


Objetivos do Lab ....................................................................................................................................................1
Exercício1 – Introdução ao ADO.NET ...................................................................................................................1
Tarefa 1 – Visão Geral dos Provedores de Dados (Data Providers ) ADO.NET ..............................................1
Tarefa 2 – String de Conexão (Connection String) ...........................................................................................3
Exercício2 – Trabalhando com os objetos SqlCommand e SqlDataReader .........................................................3
Tarefa 1 – Armazenando string de conexão em um arquivo de configuração de aplicação ............................3
Tarefa 2 – Usando o SqlCommand para inserir, atualizar, e excluir dados ......................................................4
Tarefa 3 – Trabalhando com o objeto SqlTransaction ....................................................................................11
Tarefa 4 – Usando o SqlDataReader ..............................................................................................................13
Exercício3 – Trabalhando com o objeto DataSet ................................................................................................16
Tarefa 1 – Recuperando dados com o DataSet ..............................................................................................16
Tarefa 2 – Criando um relacionamento Master – Detail..................................................................................19
Tarefa 3 – Persistindo o DataSet em um documento XML .............................................................................21
Tarefa 4 – Trabalhando com DataSet Tipados (Typed DataSets) ..................................................................23
Tarefa 5 – Inserindo, atualizando, e excluindo dados usando o SqlDataAdapter e SqlCommandBuilder .....29
Tarefa 6– Usando Stored Procedures .............................................................................................................31
Exercício4 – Carregando um ADO Recordset nativo em um DataSet ................................................................33
Tarefa 1 – Adicionando uma referência ao Microsoft ActiveX Data Objects...................................................33
Tarefa 2 – Carregando um ADO Recordset nativo em um DataSet ...............................................................33
Resumo do Laboratório........................................................................................................................................36

Página ii de 34
LAB 05: Acesso a dados usando o ADO.NET – C#
Este Lab fornece uma visão geral do ADO.NET. O primeiro exercício provê uma breve introdução ao
ADO.NET e exercícios subseqüentes que apresentam em detalhes como realizar diferentes operações
em bancos de dados como inserir, atualizar e excluir registros, executado tais operações, inclusive, de
forma transacional. O Lab discute também a forma de trabalho com o controle Datagrid e a criação
programática de objetos DataSet, DataAdapter, DataReader e Command.

Preparação do Lab
A solução trabalhada e os arquivos associados e este Lab estão localizados em
%SystemDrive%\CentrosXML\Workshops\FirstLook\Lab05\Starter Solution..

Objetivos do Lab
Tempo estimado para completar este Lab: 60 minutos
Após completar este Lab você saberá sobre:

• Entendendo o ADO.NET
• Trabalhando com os objetos DataSet e SqlDataAdapter
• Trabalhando com os objetos SqlDataReader e SqlCommand
• Inserindo, Atualizando e Excluindo registros usando um DataSet
• Carregando um Recordset nativo ADO em um DataSet

Exercício1 – Introdução ao ADO.NET


A biblioteca ADO.NET provê acesso consistente a fontes de dados como o Microsoft SQL Server,
Oracle, fontes de dados que utilizam OLE DB ou ODBC para se conectar e arquivos XML. Aplicações
voltadas a dados podem usar ADO.NET para conectar com fontes de dados, capturar e manipular os
dados capturados.

Tarefa 1 – Visão Geral dos Provedores de Dados (Data Providers ) ADO.NET


Os Data Providers (Provedores de Dados) constituem a seção núcleo da arquitetura ADO.NET,
permitindo comunicação entre as aplicações e fontes de dados. Um Data Provider permite que você
conecte com uma fonte de dados, capture e manipule dados e,por fim, atualize a fonte de dados. Os
Data Providers no .NET Framework servem, portanto, como uma ponte entre uma aplicação e a fonte
de dados.
Os ADO.NET Data Providers foram projetados para serem leves, constituindo uma camada mínima
entre a fonte de dados e seu código, aumentando a performance sem sacrificar a funcionalidade.
Os quatro principais objetos que compõem um Data Provider ADO.NET são:
Connection – Estabelece uma conexão para uma fonte de dados específica
Command – Executa um comando na fonte de dados

Página 1 de 34
DataReader – Provê acesso rápido, forward-only, read-only a dados
DataAdapter – Preenche um DataSet e resolve atualizações com a fonte de dados

O .NET Framework apresenta 4 Data Providers já embutidos.


• Data Provider SQL Server

O Data Provider para SQL Server usa o protocolo SQL específico de servidor para transferência de
dados (Tabular Data Stream), permitindo, assim, a comunicação com o SQL Server. Este Data
Provider é otimizado para acessar o SQL Server diretamente sem adicionar uma camada de
conectividade OLE DB ou ODBC. Este provedor é recomendado para aplicações utilizando o
Microsoft SQL Server 7.0 ou superior.
Para usar este Data Provider inclua a seguinte importação no seu código:
using System.Data.SqlClient;

• Data Provider OLEDB

O Data Provider fornecido pelo .NET Framework para OLEDB usa OLEDB nativo através de uma
camada de interoperabilidade COM para habilitar acesso a dados. Este Data Provider suporta tanto
transação manual como automática. Este provedor é recomendado para aplicações de camada
intermediária usando Microsoft SQL Server 6.5 ou anterior, ou qualquer outro provedor compatível
com OLE DB.
Para usar este Data Provider inclua a seguinte importação no seu código:
using System.Data.OleDb;

• Data Provider ODBC (Novo para o Framework 1.1)

O Data Provider fornecido pelo .NET Framework para ODBC utiliza um driver manager nativo para
ODBC para habilitar acesso a dados a fonte de dados ODBC. Este Data Provider suporta tanto
transação local quanto distribuída. Este provedor é recomendado para aplicações usando fontes de
dados ODBC.
Para usar este Data Provider inclua o a seguinte importação no seu código:
using System.Data.Odbc;

• Data Provider Oracle (Novo para o Framework 1.1)

O Data Provider fornecido pelo .NET Framework para Oracle habilita acesso a dados para fontes
de dados para o Oracle usando o software de conectividade cliente para Oracle. Este Data
Provider suporta software cliente para Oracle nas versões 8.1.7 e superior. Este provedor é
recomendado para aplicações utilizando fontes de dados Oracle.
Nota: Para usar este provedor você precisará importar o namespace usando o comando de menu
Project | Add Reference… e selecione o assembly System.Data.OracleClient.dll.

Página 2 de 34
Para usar este Data Provider inclua a seguinte importação no seu código:
using System.Data.OracleClient;

Tarefa 2 – String de Conexão (Connection String)


A string de conexão no ADO.NET é similar a uma string de conexão OLEDB. As aplicações precisam
especificar uma string de conexão para conectar a uma fonte de dados. A propriedade
ConnectionString do objeto Connection pode ser configurada somente quando a conexão estiver
fechada. A string de conexão é uma série de pares chave/valor (key/value) delimitados por ponto-e-
vírgula. Para conectar a um SQL Server rodando na máquina local, especifique "(local)" para o
servidor. Os seguintes elementos constituem a propriedade ConnectionString para um objeto
SqlConnection:

Data Source-or- Server O nome ou endereço de rede da instância do SQL


server para o qual conectar

Integrated Security -or- Quando false, User ID e Password são


Trusted_Connection especificados na conexão. Quando true, a conta
atual do Windows é utilizada para autenticação
User ID A conta de login do SQL Server

Password -or- Pwd A senha para o SQL Server logar

Initial Catalog -or- Database O nome do banco de dados

Exercício2 – Trabalhando com os objetos SqlCommand e SqlDataReader


Neste exercício você irá executar tarefas comuns de bancos de dados incluindo conectar a um banco
de dados SQL server utilizando a classe SqlConnection e inser, atualizar, e excluir dados usando a
classe SqlCommand. Você irá também utilizar a classe SqlDataReader para capturar um lote de dados
read-only, forward-only de um banco de dados. O uso do DataReader pode aumentar a performance
da aplicação e reduzir a sobrecarga de sistema visto que somente uma linha por vez fica armazenada
em memória. Finalmente você entenderá como realizar transações de banco de dados.

Tarefa 1 – Armazenando string de conexão em um arquivo de configuração de


aplicação
É muito comum armazenar uma string de conexão de banco de dados em um único local para simples
manutenção da aplicação. Nesta tarefa você irá criar um projeto e então criará um arquivo de
configuração de aplicação, que armazenará uma string de conexão.
• Clique em Start, selecione All Programs | Microsoft Visual Studio. NET 2003 | Microsoft
Visual Studio .NET 2003

Página 3 de 34
• Selecione o comando de menu File | New | Project

• No painel Project Types selecione Visual C# Projects

• Na lista Templates selecione Windows Application

• Configure a propriedade name para “Lab05-CS”

• Clique em OK

• Para adicionar um arquivo de configuração de aplicativo, selecione o comando de menu


Project | Add New Item…

• Na janela de diálogo Add New Item, selecione Application Configuration File da lista
Templates e clique em Open

• Escreva o seguinte conteúdo XML em destaque dentro da tag <configuration> no arquivo


App.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ConnectionString"
value="server=(local);Trusted_Connection=yes; database=northwind"/>
</appSettings>
</configuration>

Tarefa 2 – Usando o SqlCommand para inserir, atualizar, e excluir dados


O objeto SqlCommand representa um comando Transact-SQL ou uma stored procedure, que será
executada contra um banco de dados SQL Server. Nesta tarefa você criará uma conexão com o SQL
Server e então vai inserir, atualizar e excluir dados utilizando o objeto SqlCommand.
• Para abrir Solution Explorer, selecione o comando de menu View | Solution Explorer

• Dê um clique com o botão direito do mouse em Form1.cs na Solution Explorer e selecione


View Code

• Adicione o seguinte código em destaque para o código no topo do código:


...
...
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;
• Declare uma variável SqlConnection na seção de declaração geral na classe Form1
public class Form1 : System.Windows.Forms.Form
{
SqlConnection mySqlConnection;
...
...
• Para acessar a visualização de projeto do Form1, selecione o comando de menu View |
Designer

Página 4 de 34
• Dê um duplo-clique na visualização de projeto do Form1, o Visual Studio .NET 2003 irá
navegar para o arquivo fonte do Form1 e irá criar um manipulador de evento (Form1_Load)
para o evento Load do formulário.

• Coloque um valor para a variável mySqlConnection no manipulador de evento Form1_Load:


private void Form1_Load(object sender, System.EventArgs e)
{
mySqlConnection = new SqlConnection (
System.Configuration.ConfigurationSettings.AppSettings.Get("ConnectionStr
ing"));
}
• A linha de código acima, lê o valor da chave “ConnectionString” do arquivo de configuração de
aplicação (App.Config)

• Para acessar a visualização de projeto do Form1, selecione o comando de menu View |


Designer

• Para abrir a Toolbox, selecione o comando de menu View | Toolbox

• Arraste um Button da toolbox e solte o mesmo no formulário

• Dê um clique com o botão direito do mouse no button e selecione o comando de menu


Properties

• Configure as seguintes propriedades para o controle usando a janela Properties:

Name - “btnInsert”

Text - “Insert Command”

• Aumente a largura do controle button para caber o texto

• Arraste outro controle Button da toolbox e solte o mesmo no formulário

• Dê um clique com o botão direito do mouse no button e selecione o comando de menu


Properties

• Configure as seguintes propriedades para o controle usando a janela Properties:

Name - “btnUpdate”

Text - “Update Command”

• Aumente a largura do controle button para caber o texto

• Arraste outro controle Button da toolbox e solte o mesmo no formulário

• Dê um clique com o botão direito do mouse no button e selecione o comando de menu


Properties

• Configure as seguintes propriedades para o controle usando a janela Properties:

Página 5 de 34
Name - “btnDelete”

Text - “Delete Command”

• Aumente a largura do controle button para caber o texto

• Dê um duplo-clique no controle button Insert Command. O Visual Studio .NET irá navegar
para a visualização de código do Form1 (Form1.cs) e criará um manipulador de evento para o
evento Click do button Insert Command

• Adicione o seguinte código no método btnInsert_Click para inserir dados sobre um novo
cliente usando o objeto SqlCommand:
private void btnInsert_Click(object sender, System.EventArgs e)
{
SqlCommand mySqlCommand = new SqlCommand();
// Open the connection
mySqlConnection.Open();

//Assign the connection property.


mySqlCommand.Connection=mySqlConnection;
try
{
// Insert new record for XYZ customer
mySqlCommand.CommandText = "INSERT INTO Customers (CustomerId,
CompanyName, ContactName, ContactTitle, Address) Values ('XYZ','XYZ
Company', 'John Smith', 'Owner','One My Way')";

mySqlCommand.ExecuteNonQuery();
MessageBox.Show("New Customer data recorded!");
}
catch(Exception ex)
{
MessageBox.Show("Error occurred, customer data could not be
recorded: " + ex.Message);
}
finally
{
// Fechethe connection if it is open
if (mySqlConnection.State==ConnectionState.Open)
{
mySqlConnection.Close();
}
}
}
• A propriedade State do objeto SqlConnection indica o estado da conexão, se está aberta ou
fechada. Esta propriedade pode ser usada para abrir a conexão se estiver fechada para
minimizar os recursos do servidor consumido pela aplicação

• O método ExecuteNonQuery do objeto SqlCommand é usado quando a query está sendo


executada, Insert neste caso, não é esperado retorno de resultado

Página 6 de 34
• Para compilar e rodar sua aplicação selecione o comando de menu Debug | Start Without
Debugging ou pressione CTRL+F5

• Clique no button Insert Command para realizar a operarão de inserção

• Uma caixa de mensagem aparecerá dizendo “New Customer data recorded!”

• Clique em OK para fechar a caixa de mensagem

• Feche o Form1

• Para verificar se o dado inserido foi de fato inserido com sucesso

o Mude para o IDE do Visual Studio .NET

o Selecione o comando de menu View | Server Explorer

o Para adicionar um Data Connection, dê um clique com o botão direito do mouse no nó


Data Connections e selecione o comando de menu Add Connection…

Figura 2.1: Adicionando Data Connection...

o Na janela de diálogo Data Link Properties, especifique o nome de servidor como


“(local)”

o Selecione o radio button “Use Windows NT Integrated Security”

o Na caixa de seleção “Selecione the database on the server”, selecione Northwind

o Clique em Test Connection. Você verá uma caixa de mensagem Microsoft Data Link
dizendo “Test Connection succeeded”

o Clique em OK para fechar esta caixa de mensagem

o Clique em OK para fechar a janela de diálogo Data Link Properties

Página 7 de 34
o Selecione o comando de menu View | Server Explorer e navegue para o nó Data
Connections | <servername>.NorthWind.dbo | Tables | Customers

Figura 2.2 Navegando para a tabela Customers

o Dê um duplo-clique na tabela Customer para visualizar todos os dados armazenados


na tabela

o Verifique no final da tabela que um novo cliente com um ID de ‘XYZ’ foi armazenado

• Para abrir Solution Explorer, selecione o comando de menu View | Solution Explorer

• Dê um clique com o botão direito do mouse em Form1.cs na Solution Explorer e selecione


View Code

• Dê um duplo-clique no controle button Update Command. O Visual Studio .NET irá navegar
para a visualização de código do Form1 (Form1.cs) e irá criar um manipulador de eventos para
o evento Click do button Update Command

• Adicione o código no método btnUpdate_Click para atualizar o dado inserido usando o objeto
SqlCommand:
private void btnUpdate_Click(object sender, System.EventArgs e)
{
SqlCommand mySqlCommand = new SqlCommand();
// Open the connection
mySqlConnection.Open();

//Assign the connection property.


mySqlCommand.Connection=mySqlConnection;
try
{
// Update XYZ customer
mySqlCommand.CommandText = "UPDATE Customers SET ContactName='Ian
Smith' WHERE CustomerId='XYZ'";

Página 8 de 34
mySqlCommand.ExecuteNonQuery();
MessageBox.Show("Customer Data successfully updated.");
}

catch(Exception ex)
{
MessageBox.Show("Error occurred, customer data could not be
updated: " + ex.Message);
}
finally
{
// Fechethe connection if it is open
if (mySqlConnection.State==ConnectionState.Open)
{
mySqlConnection.Close();
}
}
}
• Para compilar e rodar sua aplicação selecione o comando de menu Debug | Start Without
Debugging ou pressione CTRL+F5

• Clique no button Update Command para realizar toda a atualização da linha inserida usando o
objeto SqlCommand

• Uma caixa de mensagem aparecerá dizendo “Customer Data successfully updated.”

• Clique em OK para fechar a caixa de mensagem

• Feche o Form1

• Para verificar se o dado foi atualizado com sucesso

o Mude para o IDE do Visual Studio .NET

o Selecione o comando de menu View | Server Explorer

o Navegue para o nó Data Connections | <servername>.NorthWind.dbo | Tables |


Customers

o Dê um duplo-clique na tabela Customer para visualizar todos os dados da tabela

o Para atualizar o dado mostrado, selecione o comando de menu Query | Run

o Verifique no final da tabela que o nome do cliente mudou para “Ian Smith”

• Para abrir o Solution Explorer, selecione o comando de menu View | Solution Explorer

• Dê um clique com o botão direito do mouse em Form1.cs na Solution Explorer e selecione


View Code

Página 9 de 34
• Dê um duplo-clique no controle button Delete Command. O Visual Studio .NET irá navegar
para a visualização de código do Form1 (Form1.cs) e criará um manipulador de evento para o
evento Click do button Delete Command.

• Adicione o seguinte código no método btnDelete_Click para apagar o dado inserido utilizando
o objeto SqlCommand:

private void btnDelete_Click(object sender, System.EventArgs e)


{
SqlCommand mySqlCommand = new SqlCommand();
// Open the connection
mySqlConnection.Open();

//Assign the connection property.


mySqlCommand.Connection=mySqlConnection;
try
{
// Delete XYZ customer
mySqlCommand.CommandText = "DELETE FROM Customers WHERE
CustomerId='XYZ'";
mySqlCommand.ExecuteNonQuery();
MessageBox.Show("Customer Data successfully deleted.");
}
catch(Exception ex)
{
MessageBox.Show("Error occurred, data could not be deleted: " +
ex.Message);
}
finally
{
// Fechethe connection if it is open
if (mySqlConnection.State==ConnectionState.Open)
{
mySqlConnection.Close();
}
}
}
• Para compilar e rodar sua aplicação selecione o comando de menu Debug | Start Without
Debugging ou pressione CTRL+F5

• Clique no button Delete Command para realizar a operação de exclusão

• Uma caixa de mensagem aparecerá dizendo “Customer Data successfully deleted.”

• Clique em OK para fechar a caixa de mensagem

• Feche o Form1

• Para verificar se o dado foi excluído com sucesso

Página 10 de 34
o Mude para o IDE do Visual Studio .NET

o Selecione o comando de menu View | Server Explorer

o Navegue para o nó Data Connections | <servername>.NorthWind.dbo | Tables |


Customers

o Dê um duplo-clique na tabela Customer para visualizar todos os dados da tabela

o Para atualizar o dado mostrado, selecione o comando de menu Query | Run

o Arraste até o final da tabela para verificar que o cliente com o ID ‘XYZ’ não está
presente

Tarefa 3 – Trabalhando com o objeto SqlTransaction


Uma transação é uma unidade de trabalho em qual uma série de operações ocorrem entre os
comandos BEGIN TRANSACTION e END TRANSACTION de uma aplicação. Uma transação executa
exatamente uma vez e é atômica – todo o trabalho ou nenhum é realizado. A classe SqlTransaction
representa uma transação Transact-SQL para ser feita em um banco de dados SQL Server. Nesta
tarefa, você trabalhará com o objeto SqlTransaction.
• O seguinte exemplo de código representa a estrutura de uma operação transacional:
SqlTransaction myTrans;

myTrans = mySqlConnection.BeginTransaction();
SqlCommand.Transaction = myTrans;
try
{
...
...
...
myTrans.Commit();
}
catch(Exception ex)
{
myTrans.Rollback();
}
• Para abrir Solution Explorer, selecione o comando de menu View | Solution Explorer

• Dê um clique com o botão direito do mouse em Form1.cs na Solution Explorer e selecione


View Code

• Para abrir a Toolbox, selecione o comando de menu View | Toolbox

• Arraste um Button da toolbox e solte o mesmo no formulário

• Dê um clique com o botão direito do mouse no button e selecione o comando de menu


Properties

• Configure as seguintes propriedades para o controle usando a janela Properties:

Página 11 de 34
Name - “btnTransaction”

Text - “Transaction”

• Aumente a largura do controle button para caber o texto

• Dê um duplo - clique no controle button Transaction. O Visual Studio .NET irá navegar para a
visualização de código do Form1 (Form1.cs) e criará um manipulador de evento para o evento
Click do button Transaction

• Adicione o seguinte código no método btnTransaction_Click para realizar uma operação


transacional de inserção, atualização, e exclusão usando o objeto SqlCommand:
private void btnTransaction_Click(object sender, System.EventArgs e)
{
SqlTransaction myTrans;
SqlCommand mySqlCommand = new SqlCommand();
// Open the connection
mySqlConnection.Open();

//Assign the connection property.


mySqlCommand.Connection=mySqlConnection;
myTrans = mySqlConnection.BeginTransaction();
mySqlCommand.Transaction = myTrans;
try
{
// Insert new record for XYZ customer
mySqlCommand.CommandText = "INSERT INTO Customers (CustomerId,
CompanyName, ContactName, ContactTitle, Address) Values ('XYZ','XYZ
Company', 'John Smith', 'Owner','One My Way')";
mySqlCommand.ExecuteNonQuery();

// Update XYZ customer


mySqlCommand.CommandText = "UPDATE Customers SET ContactName='Ian
Smith' WHERE CustomerId='XYZ'";
mySqlCommand.ExecuteNonQuery();

// Delete XYZ customer


mySqlCommand.CommandText = "DELETE FROM Customers WHERE
CustomerId='XYZ'";

mySqlCommand.ExecuteNonQuery();
MessageBox.Show("Committing transaction");

myTrans.Commit();
MessageBox.Show("Data successfully updated.");
}

catch(Exception ex)
{
myTrans.Rollback();

Página 12 de 34
MessageBox.Show("Error occurred, data has not been successfully
updated: " + ex.Message);
}

finally
{
// Fechethe connection if it is open
if (mySqlConnection.State==ConnectionState.Open)
{
mySqlConnection.Close();
}
}
}
• Para compilar e rodar sua aplicação selecione o comando de menu Debug | Start Without
Debugging ou pressione CTRL+F5

• Clique no button Transaction para realizar todas as operações, ou todas as operações


ocorrem ou nenhuma ocorre

• Uma caixa de mensagem dizendo “Committing transaction”

• Clique em OK para fechar a caixa de mensagem

• Uma caixa de mensagem dizendo “Data successfully updated.”

• Clique em OK para fechar a caixa de mensagem

• Feche o Form1

• Para verificar se a transação ocorreu com sucesso

o Mude para o IDE do Visual Studio .NET

o Selecione o comando de menu View | Server Explorer

o Navegue para o nó Data Connections | <servername>.NorthWind.dbo | Tables |


Customers

o Dê um duplo - clique na tabela Customer para visualizar todos os dados da tabela

o Para atualizar o dado mostrado, selecione o comando de menu Query | Run

o Arraste até o final da tabela para verificar que o registro do cliente ID ‘XYZ’ não está
presente

Tarefa 4 – Usando o SqlDataReader


O SqlDataReader prove um mecanismo para leitura de um lote de dados forward-only de linhas
retornadas em uma query de banco de dados SQL Server. Nesta tarefa você usará o objeto
SqlDataReader. Você usará o parâmetro CommandBehavior.CloseConnection do DataReader para
que a conexão se feche automaticamente quando a instância do objeto SqlDataReader é fechada.

Página 13 de 34
• Para abrir Solution Explorer, selecione o comando de menu View | Solution Explorer

• Dê um clique com o botão direito do mouse em Form1.cs na Solution Explorer e selecione


View Code

• Para abrir a Toolbox, selecione o comando de menu View | Toolbox

• Arraste outro Button da toolbox e solte o mesmo sobre o formulário como mostrado na Figura
2.3 a seguir

• Dê um clique com o botão direito do mouse no button e selecione Properties

• Configure as seguintes propriedades para o controle usando a janela Properties:

Name - “btnDataReader”

Text - “Data Reader”

• Aumente a largura do controle button para caber o texto

• Arraste uma ComboBox da toolbox e solte o mesmo sobre o formulário como mostrado na
Figura 2.3 abaixo

• Dê um clique com o botão direito do mouse na combo box e selecione Properties

• Configure as seguintes propriedades para o controle usando a janela Properties:

DropDownStyle - DropDownList (selecione da lista de opções)

Figure 2.3 Visualização de desenho do Form1

Página 14 de 34
• Dê um duplo-clique no controle button Data Reader. O Visual Studio .NET irá navegar para a
visualização de código do Form1 (Form1.cs) e criará um manipulador de evento para o evento
Click do button Data Reader

• Abra uma conexão de banco de dados e leia o dado no SqlDataReader usando o objeto
SqlCommand no método btnDataReader_Click como mostrado abaixo:
private void btnDataReader_Click(object sender, System.EventArgs e)
{
SqlDataReader myReader = null;
SqlCommand mySqlCommand = new SqlCommand("select ContactName from
customers", mySqlConnection);
try
{
mySqlConnection.Open();
myReader =
mySqlCommand.ExecuteReader(CommandBehavior.CloseConnection);
while (myReader.Read())
{
comboBox1.Items.Add(myReader["ContactName"].ToString());
}
MessageBox.Show("All names loaded successfully!");
}
catch(Exception ex)
{
MessageBox.Show("Error occurred: " + ex.Message);
}
finally
{
if (myReader != null)
myReader.Close();
}
}
• Para compilar e rodar sua aplicação selecione o comando de menu Debug | Start Without
Debugging ou pressione CTRL+F5

• Clique no button Data Reader para carregar os nomes de contato de todos os clientes na caixa
combo box

• Uma caixa de mensagem aparecerá dizendo “All names loaded successfully!”

• Clique em OK para fechar a caixa de mensagem. A combo Box é populada com o dado

• Expanda a combo box para verificar que os nomes de contatos estão listados

• Feche o Form1

Nota: Uma vez que você usou o parâmetro CommandBehavior.CloseConnection no método


ExecuteReader do objeto SqlCommand, o estado de conexão é fechado quando o DataReader é
fechado. Você não precisa, portanto, fechar a conexão explicitamente.

Página 15 de 34
Exercício3 – Trabalhando com o objeto DataSet
Neste exercício você vai popular um DataSet utilizando o objeto SqlDataAdapter com o intuito de
recuperar dados para a camada de interface. O DataSet (ADO.NET) é uma representação residente
em memória de dados que provê um modelo de programação relacional independente da fonte de
dados. O objeto DataSet representa um conjunto completo de dados incluindo tabelas, regras, e
relacionamentos entre tabelas. Sendo o DataSet independente da fonte de dados, um DataSet pode
incluir dados de múltiplas fontes. Interação com as fontes de dados existentes é controlada através do
DataAdapter.
Neste exercício você irá:
• Popular um DataSet com dados usando o objeto SqlDataAdapter.
• Usar os objetos SqlCommandBuilder e SqlDataAdapter para inserir, atualizar e excluir dados.
• Chamar uma stored procedure e persistir o DataSet em Xml.
• Criar uma DataRelation

Tarefa 1 – Recuperando dados com o DataSet


Nesta tarefa você recuperará dados usando um objeto SqlDataAdapter e irá preencher um objeto
DataSet. Finalmente você irá acoplar o DataSet a um controle DataGrid.
• Para abrir Solution Explorer, selecione o comando de menu View | Solution Explorer

• Dê um clique com o botão direito do mouse no projeto (Lab05-CS) na Solution Explorer e


selecione Add | Add Windows Form… A janela de diálogo Add New Item aparecerá

• Clique em Open. O Form2.cs é adicionado ao projeto e está visível na Solution Explorer

• Dê um clique com o botão direito do mouse em Form2.cs na Solution Explorer e selecione


View Code

• Adicione o seguinte código em destaque no topo do código


...
...
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;
• Declare variáveis para SqlConnection, DataSet e SqlDataAdapter na seção de declaração
geral da classe Form2. O SqlDataAdapter irá gerenciar as atualizações para a tabela
Customers
public class Form2 : System.Windows.Forms.Form
{
SqlConnection mySqlConnection;
DataSet myDataSet;
SqlDataAdapter mySqlDataAdapter;
...
...

Página 16 de 34
• Para acessar a visualização de projeto do Form2, selecione o comando de menu View |
Designer

• Dê um duplo-clique na visualização de projeto do Form2, O Visual Studio .NET irá navegar


para a visualização de código do Form2 (Form2.cs) e criará um método Form2_Load para o
formulário

• Configure a propriedade ConnectionString da variável declarada no manipulador de eventos


Form2_Load:
private void Form2_Load(object sender, System.EventArgs e)
{
mySqlConnection = new SqlConnection (
System.Configuration.ConfigurationSettings.AppSettings.Get("ConnectionStr
ing"));
}
• Para acessar a visualização de projeto do Form2, selecione o comando de menu View |
Designer

• Para abrir a Toolbox, selecione o comando de menu View | Toolbox

• Arraste um Button da toolbox e solte o mesmo no Form2

• Dê um clique com o botão direito do mouse no button e selecione Properties

• Configure as seguintes propriedades para o controle usando a janela Properties:

Name - “btnGet”

Text - “Get Data”

• Para abrir a Toolbox, selecione o comando de menu View | Toolbox

• Arraste um controle DataGrid da toolbox e solte o mesmo no formulário como mostrado na


Figura 3.1 abaixo. Um controle DataGrid é adicionado com o nome dataGrid1

Página 17 de 34
Figura 3.1 Visualização de projeto do Form2

• Dê um duplo-clique no botão Get Data

• Adicione o seguinte código em destaque ao método btnGet_Click


private void btnGet_Click(object sender, System.EventArgs e)
{
mySqlDataAdapter = new SqlDataAdapter("select * from customers",
mySqlConnection);
try
{
myDataSet = new DataSet();
mySqlDataAdapter.Fill(myDataSet,"Customers");
dataGrid1.DataSource= myDataSet.Tables["Customers"].DefaultView;
}

catch(Exception ex)
{
MessageBox.Show("Unable to retrieve Customer data: " +
ex.Message);
}
}
• Para carregar o Form2 durante a inicialização da aplicação

o Abra o Solution Explorer, selecionando o comando de menu View | Solution Explorer

o Dê um clique com o botão direito do mouse em Form1.cs na Solution Explorer e


selecione View Code

Página 18 de 34
o No arquivo fonte de Form1, localize o método Main()

o Para carregar Form2 quando a aplicação é executada, mude o parâmetro do método


Application.Run para Form2()
static void Main()
{
Application.Run(new Form2());
}
• Para compilar e rodar sua aplicação selecione o comando de menu Debug | Start Without
Debugging ou pressione CTRL+F5

• Para carregar dados no controle DataGrid, clique no button Get Data

• Feche o Form2

Tarefa 2 – Criando um relacionamento Master – Detail


Um DataSet pode conter múltiplas tabelas relacionadas ou não. Como os dados podem ser
recuperados de em bancos de dados relacionais ou hierárquicos, o objeto DataSet pode manipular
tanto relacionamentos hierárquicos quanto relacionamentos de chave-primária e estrangeira.
Relacionamentos em um DataSet podem ser definidos de várias formas. Por padrão, exclusões e
atualizações são cascateadas: por exemplo, se você excluir uma linha de cliente, os pedidos
correlacionados a este cliente serão excluídos também; se você atualizar a chave do registro de
clientes, os valores das chaves associadas aos pedidos também serão atualizados. É possível mudar
o comportamento padrão das atualizações cascateadas.
Um objeto DataSet gerencia o relacionamento entre tabelas em uma coleção chamada Relations. Você
pode adicionar uma relação a esta coleção usando a coluna ou colunas (em uma chave múltipla) de
tabelas relacionadas. Nesta tarefa você irá criar uma relação entre clientes e pedidos, e nomeará a
relação de CustOrders. Finalmente você irá apresentar o dado relacionado em um controle DataGrid.

• Para abrir Solution Explorer, selecione o comando de menu View | Solution Explorer

• Dê um clique com o botão direito do mouse em Form2.cs na Solution Explorer e selecione


View Code

• Declare uma variável SqlDataAdapter na seção de declaração geral da classe Form2 para
gerenciar atualizações na tabela Orders:
public class Form2 : System.Windows.Forms.Form
{
SqlConnection mySqlConnection;
DataSet myDataSet;
SqlDataAdapter mySqlDataAdapter;
SqlDataAdapter mySqlDataAdapter2;
...
...
• Adicione o seguinte código em destaque ao método btnGet_Click:

Página 19 de 34
private void btnGet_Click(object sender, System.EventArgs e)
{
mySqlDataAdapter = new SqlDataAdapter("select * from customers",
mySqlConnection);
mySqlDataAdapter2 = new SqlDataAdapter("select * from orders",
mySqlConnection);
try
{
myDataSet = new DataSet();
mySqlDataAdapter.Fill(myDataSet,"Customers");
mySqlDataAdapter2.Fill(myDataSet,"Orders");

// ADD RELATION
myDataSet.Relations.Add("CustOrders",myDataSet.Tables["Customers"].Col
umns["CustomerId"],myDataSet.Tables["Orders"].Columns["CustomerId"]);

dataGrid1.DataSource = myDataSet.Tables["Customers"].DefaultView;
}
catch(Exception ex)
{
MessageBox.Show("Unable to retrieve Customer data: " +
ex.Message);
}
}
• Este código carrega os dados da tabela Orders no DataSet e cria uma relação entre as tabelas
Customers e Orders

• Para compilar e rodar sua aplicação selecione o comando de menu Debug | Start Without
Debugging ou pressione CTRL+F5

• Clique em Get Data. Observe o dado relacionado no controle DataGrid, acoplando o DataGrid
na tabela Customers, ela automaticamente recupera os dados relacionados da tabela Orders
usando o DataRelation entre as duas tabelas

• Feche o Form2

Página 20 de 34
Figure 3.2 DataSet com relacionamentos mostrados no DataGrid

Tarefa 3 – Persistindo o DataSet em um documento XML


Nesta tarefa você irá persistir um DataSet em um documento XML e irá carregar dados originalmente
no formato XML no mesmo DataSet.

• Para abrir Solution Explorer, selecione o comando de menu View | Solution Explorer

• Para abrir visualização de projeto do Form2, dê um duplo-clique em Form2.cs na Solution


Explorer

• Para abrir a Toolbox, selecione o comando de menu View | Toolbox

• Arraste um Button da toolbox e solte o mesmo no Form2

• Dê um clique com o botão direito do mouse no button e selecione Properties

• Configure as seguintes propriedades para o controle usando a janela Properties:

Name - “btnSave”

Text - “Save Xml”

• Arraste um Button da toolbox e solte o mesmo no Form2

• Dê um clique com o botão direito do mouse no button e selecione Properties

• Configure as seguintes propriedades para o controle usando a janela Properties:

Name - “btnLoad”

Text - “Load Xml”

Página 21 de 34
Figure 3.3 Visualização de desenho do Form2

• Para visualizar o Form2 no modo de edição de código, selecione o comando de menu View |
Code

• Declare uma variável String na seção de declaração geral da classe Form2. Esta string irá
armazenar o caminho do arquivo XML no qual o DataSet será persistido
public class Form2 : System.Windows.Forms.Form
{
SqlConnection mySqlConnection;
DataSet myDataSet;
SqlDataAdapter mySqlDataAdapter;
SqlDataAdapter mySqlDataAdapter2;
string xmlFilename=@"C:\Customers.xml";
...
...
• Para acessar a visualização de projeto do Form2, selecione o comando de menu View |
Designer

• Dê um duplo-clique no controle button Save Xml

• Adicione o seguinte código em destaque ao método btnSave_Click


private void btnSave_Click(object sender, System.EventArgs e)
{
myDataSet.WriteXml(xmlFilename);
MessageBox.Show("Customer details stored in: " + xmlFilename);
myDataSet.Clear(); //this will clear the grid also
}
• Para acessar a visualização de projeto do Form2, selecione o comando de menu View |
Designer

Página 22 de 34
• Dê um duplo-clique no controle button Load Xml

• Adicione o seguinte código em destaque ao método btnLoad_Click


private void btnLoad_Click(object sender, System.EventArgs e)
{
MessageBox.Show("Reading data from XML file... ");
myDataSet.ReadXml(xmlFilename);
dataGrid1.DataSource= myDataSet.Tables["Customers"].DefaultView;
}
• Para compilar e rodar sua aplicação selecione o comando de menu Debug | Start Without
Debugging ou pressione CTRL+F5

• Clique em Get Data. A aplicação irá carregar as tabelas Customer e Order do banco de dados
Northwind

• Clique em Save Xml para escrever os dados de cliente e pedidos no arquivo XML
C:\Customers.xml. Clique em OK para fechar a caixa de mensagem “Customer details stored in
C:\Customers.xml”

• Clique em Load Xml para ler os dados de cliente e pedidos do arquivo XML. Clique em OK
para fechar a caixa de mensagem “Reading data from XML File”. A aplicação irá ler o dado do
arquivo C:\Customers.xml e irá preencher os dados no controle DataGrid usando o objeto
DataSet

• Feche o Form2

• Abra o C:\Customers.xml no Internet Explorer e note como todos os dados do DataSet estão
persistidos neste arquivo

Tarefa 4 – Trabalhando com DataSets Tipados (Typed DataSets)


Nesta tarefa você usará um Typed DataSet que permite que você acesse o dado armazenado no
DataSet através de um modelo de programação fortemente tipado "strongly typed". Isto permite que o
desenvolvedor acesse as tabelas e colunas que são parte do DataSet com propriedades fortemente
tipadas no DataSet.

• Para abrir Solution Explorer, selecione o comando de menu View | Solution Explorer

• Dê um clique com o botão direito do mouse no projeto (Lab05-CS) na Solution Explorer e


selecione Add | Add New Item…

• Na janela de diálogo Add New Item, selecione Data Set da lista Templates

• Modifique o Name para “Customer.xsd” e clique em Open

Página 23 de 34
Figure 3.4: Criando o arquivo Customer.xsd

• Selecione o comando de menu View | Server Explorer para abrir o Server Explorer

• Navegue para o nó <server name>.northwind.dbo | Tables | Customers

• Arraste a tabela Customers do Server Explorer e solte a mesma na visualização de projeto do


arquivo Customer.xsd

• Arraste a tabela Orders do Server Explorer e solte a mesma na visualização de projeto do


arquivo Customer.xsd

• Arraste o campo CustomerID da tabela Customers na visualização de projeto para o campo


CustomerID na tabela Orders. A janela de diálogo Edit Relation é mostrada, mude o Name
do relacionamento para “CustOrders”:

Página 24 de 34
Figure 3.5: Janela de diálogo Edit Relation

• Para fechar a janela de diálogo, clique em OK. Isto cria um typed dataset como mostrado na
Figura 3.5

Página 25 de 34
Figure 3.5: Customer.xsd em visualização de projeto

• Selecione o comando de menu File | Save All para salvar a solução

• Selecione o comando de menu View | Solution Explorer

• Dê um duplo-clique em Form2.cs na Solution Explorer ou clique na aba Form2.cs [Design] tab

• Para abrir a Toolbox, selecione o comando de menu View | Toolbox

• Selecione a aba Data na toolbox

• Arraste um objeto DataSet da toolbox e solte o mesmo na visualização de projeto do Form2

• Na janela de diálogo Add DataSet, selecione o radio button Typed Dataset e aceite o valor
padrão na caixa de seleção Name como mostrado a seguir:

Página 26 de 34
Figure 3.6: Janela de diálogo Add Dataset

• Para fechar a janela de diálogo Add DataSet, clique em OK. Isto irá adicionar o DataSet
customer1 no formulário

• Dê um clique com o botão direito do mouse no controle DataGrid na visualização de projeto do


Form2 e selecione Properties

• Configure a propriedade DataSource do controle DataGrid para “customer1.Customers”


(selecione na caixa de seleção). O cabeçalho de coluna aparecerá no controle DataGrid como
mostrado abaixo:

Figure 3.7: Visualização de desenho do Form2

Página 27 de 34
• Para visualizar o modo de edição de código, selecione o comando de menu View | Code

• Edite a declaração da variável myDataSet como mostrado abaixo:


public class Form2 : System.Windows.Forms.Form
{
SqlConnection mySqlConnection;
//DataSet myDataSet;
Customer myDataSet;
...
...
• Adicione o seguinte código em destaque ao método btnGet_Click e comente o código que usa
o antigo tipo de DataSet
private void btnGet_Click(object sender, System.EventArgs e)
{
mySqlDataAdapter = new SqlDataAdapter("select * from customers",
mySqlConnection);
mySqlDataAdapter2 = new SqlDataAdapter("select * from orders",
mySqlConnection);
try
{
//myDataSet = new DataSet();
myDataSet = new Customer();
mySqlDataAdapter1.Fill(myDataSet,"Customers");
mySqlDataAdapter2.Fill(myDataSet,"Orders");
// ADD RELATION
myDataSet.Relations.Add("CustOrders",myDataSet.Tables["Customers"].Col
umns["CustomerId"],myDataSet.Tables["Orders"].Columns["CustomerId"]);

//dataGrid1.DataSource =
myDataSet.Tables["Customers"].DefaultView;
dataGrid1.DataSource = myDataSet.Customers.DefaultView;
}
catch(Exception ex)
{
MessageBox.Show("Unable to retrieve Customer data: " +
ex.Message);
}
}
• Apague a linha de código que adiciona a relação entre as tabelas Customers e Orders

• Note o Intellisense oferecido pelo IDE do Visual Studio IDE, quando se digita “myDataSet.” A
tabela Customers está disponível como uma propriedade. Adicionalmente, digitando
“myDataSet.Customers.” deixará disponível todas as colunas da tabela Customers como
propriedade. Isto é um dos benefícios chaves dos DataSets Tipados (Typed Datasets): o
desenvolvedor pode acessar o dado do banco de dados como objetos persistidos em memória.

• Para compilar e rodar sua aplicação selecione o comando de menu Debug | Start Without
Debugging ou pressione CTRL+F5

Página 28 de 34
• Clique em Get Data. Os dados de clientes são populados no controle DataGrid do typed
dataset

• Expanda o ícone + próximo a qualquer linha e clique no link para visualizar os detalhes de
pedidos para o cliente selecionado

• Feche o Form2

Tarefa 5 – Inserindo, atualizando, e excluindo dados usando o SqlDataAdapter e


SqlCommandBuilder

Nesta tarefa você irá utilizar o objeto SqlDataAdapter para inserir, atualizar e excluir dados

• Declare uma variável SqlCommandBuilder como mostrado abaixo:


public class Form2 : System.Windows.Forms.Form
{
SqlConnection mySqlConnection;
//DataSet myDataSet;
Customer myDataSet;
...
SqlCommandBuilder cbCustomers;
...
• Para acessar a visualização de projeto do Form2, selecione o comando de menu View |
Designer

• Para abrir a Toolbox, selecione o comando de menu View | Toolbox

• Clique na aba Windows Forms da Toolbox

• Arraste um Button da toolbox e solte o mesmo na visualização de projeto do formulário como


mostrado na Figura 3.8 a seguir

• Dê um clique com o botão direito do mouse no button e selecione Properties

• Configure as seguintes propriedades para o controle usando a janela Properties:

Name - “btnSaveChanges”

Text - “Save Changes”

• Aumente a largura do controle button para caber o texto

Página 29 de 34
Figure 3.8: Visualização de desenho do Form2

• Dê um duplo-clique no controle button Get Data

• Adicione o seguinte código em destaque ao método btnGetData_Click


private void btnGet_Click(object sender, System.EventArgs e)
{
...

mySqlDataAdapter.Fill(myDataSet,"Customers");
mySqlDataAdapter2.Fill(myDataSet,"Orders");
cbCustomers = new SqlCommandBuilder(mySqlDataAdapter);
...
• Para acessar a visualização de projeto do Form2, selecione o comando de menu View |
Designer

• Dê um duplo-clique no controle button Save Changes

• Adicione o seguinte código em destaque ao método btnSaveChanges_Click


private void btnSaveChanges_Click(object sender, System.EventArgs e)
{
try
{
mySqlDataAdapter.Update(myDataSet, "Customers");
MessageBox.Show("Changes Recorded Successfully into the Customers
table.");
}
catch(Exception ex)
{
MessageBox.Show("Changes not saved: " + ex.Message);
}
}

Página 30 de 34
• Este exemplo de código salva todas as mudanças feitas no DataSet de volta para a tabela do
banco de dados

• Para compilar e rodar sua aplicação selecione o comando de menu Debug | Start Without
Debugging ou pressione CTRL+F5

• Clique em Get Data para popular todos os dados de clientes e pedidos no controle DataGrid

• Arraste para o final do controle DataGrid. Para adicionar uma nova linha, entre com os
seguintes valores na linha marcada com um ‘*’ especificando Customer ID como “XXX”,
Company Name como “XXX Company” e Contact Name como “John Doe”

• Adicione outra nova linha, especificando Customer ID como “YYY”, Company Name como
“YYY Company” e Contact Name como “Jane Doe”

• Mude o Company name para o Customer ID “WOLZA” para “WolskEE Zajazd”

• Para salvar as mudanças dos registros no banco de dados clique em Save Changes. Uma
caixa de mensagem aparecerá dizendo “Changes Recorded Successfully into the Customers
table”

• Clique em OK para fechar a caixa de mensagem

• Para verificar se as mudanças foram salvas, clique em Get Data para re-popular todos os
dados de clientes e pedidos no controle DataGrid.

• Para apagar o cliente como ID “YYY”, marque a linha correspondente e pressione a tecla
Delete

• Mude o Company name para o Customer ID “WOLZA” para “Wolski Zajazd”

• Para salvar as mudanças nos registros para o banco de dados clique em Save Changes. Uma
caixa de mensagem aparecerá dizendo “Changes Recorded Successfully into the Customers
table”

• Clique em OK para fechar a caixa de mensagem

• Para verificar se as mudanças foram salvas, clique em Get Data para re-popular todos os
dados de clientes e pedidos no controle DataGrid.

• Feche o Form2.

Tarefa 6– Usando Stored Procedures


Nesta tarefa você fará a chamada a uma stored procedure usando o objeto SqlDataAdapter
• Para acessar a visualização de projeto do Form2, selecione o comando de menu View |
Designer

• Para abrir a Toolbox, selecione o comando de menu View | Toolbox

• Arraste um Button da toolbox e solte o mesmo na visualização de projeto do formulário como


mostrado na Figura 3.9 a seguir

Página 31 de 34
• Dê um clique com o botão direito do mouse no button e selecione Properties

• Configure as seguintes propriedades para o controle usando a janela Properties:

Name - “btnSP”

Text - “Call SP”

Figure 3.9: Visualização de desenho do Form2

• Para visualizar as propriedades do controle DataGrid, dê um clique com o botão direito do


mouse no controle DataGrid e selecione o comando de menu Properties

• Apague a propriedade DataSource do controle DataGrid

• Dê um duplo-clique no controle button Call SP

• Adicione o seguinte código em destaque ao método btnSP_Click:


private void btnSP_Click(object sender, System.EventArgs e)
{
try
{
SqlDataAdapter myDataAdapter = new SqlDataAdapter("CustOrderHist",
mySqlConnection);
myDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
myDataAdapter.SelectCommand.Parameters.Add(new
SqlParameter("@CustomerID", SqlDbType.NVarChar, 5));
myDataAdapter.SelectCommand.Parameters["@CustomerID"].Value = "ALFKI";
DataSet ds = new DataSet();
myDataAdapter.Fill(ds, "Products");

Página 32 de 34
dataGrid1.DataSource=ds.Tables["Products"].DefaultView;
}

catch(Exception ex)
{
MessageBox.Show("Error occurred: " + ex.Message);
}
}
• Este código de exemplo recupera os históricos de pedidos de um customer ID específico
através da chamada da stored procedure CustOrderHist

• Para compilar e rodar sua aplicação selecione o comando de menu Debug | Start Without
Debugging ou pressione CTRL+F5

• Clique em Call SP. O histórico de pedidos do cliente para o customer ID ‘ALFKI’ será mostrado
no controle DataGrid

• Feche o Form2

Exercício4 – Carregando um Recordset nativo ADO em um DataSet


Neste exercício você usará um objeto Recordset ADO 2.x em conjunto com um Dataset ( ADO.NET) .
Isto será feito usando o overload do método OleDbDataAdapter.Fill do Data Provider OLEDB, que
aceita um objeto Recordset ADO.

Tarefa 1 – Adicionando uma referência ao Microsoft ActiveX Data Objects


• De maneira a usar o ADO em uma aplicação .NET, uma referência a biblioteca Microsoft
ActiveX Data Object type é necessária. Para configurar esta referência, abra o Solution
Explorer usando o comando de menu View | Solution Explorer

• Dê um clique com o botão direito do mouse no nó References na Solution Explorer e selecione


Add Reference. A janela de diálogo Add Reference aparecerá

• Mude para a aba COM na janela de diálogo Add Reference

• Selecione Microsoft ActiveX Data Objects 2.7 Library na lista Component Name

• Clique em Select para adicionar uma referência a biblioteca de tipos selecionada

• Click em OK para fechar a janela de diálogo Add Reference

Tarefa 2 – Carregando um Recordset nativo ADO em um DataSet


• Para abrir Solution Explorer, selecione o comando de menu View | Solution Explorer

• Dê um clique com o botão direito do mouse no projeto (Lab05-CS) na Solution Explorer e


selecione Add | Add Windows Form…

Página 33 de 34
• Para adicionar o Form3.cs ao projeto corrente, clique em Open

• Dê um clique com o botão direito do mouse em Form3.cs na Solution Explorer e selecione


View Code

• Na parte superior da seção de código, adicione o seguinte código em destaque:


..
...
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;
using System.Data.OleDb;
using ADODB;
• Para acessar a visualização de projeto do Form3, selecione o comando de menu View |
Designer

• Para abrir a Toolbox, selecione o comando de menu View | Toolbox

• Arraste um controle DataGrid da toolbox e solte o mesmo sobre a visualização de projeto do


Form3

• Arraste um controle Button da toolbox e solte o mesmo sobre a visualização de projeto do


Form3

• Dê um clique com o botão direito do mouse no button e selecione Properties

• Configure as seguintes propriedades para o controle usando a janela Properties:

Name - “btnLoadRS”

Text - “Load Recordset”

• Aumente a largura do controle button para caber o texto

Figure 4.1: Visualização de desenho do Form3

Página 34 de 34
• Dê um duplo-clique no botão Load Recordset

• Adicione o seguinte código em destaque ao método btnLoadRS_Click:

private void btnLoadRS_Click(object sender, System.EventArgs e)


{
try
{
RecordsetClass rsObj = new RecordsetClass();
string constr =
"provider=sqloledb;server=localhost;database=Northwind;
trusted_connection=yes";

rsObj.Open("Customers",constr,ADODB.CursorTypeEnum.adOpenForwardOnly,A
DODB.LockTypeEnum.adLockReadOnly,0x200);

DataSet myDataSet = new DataSet();


OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
adapter.Fill(myDataSet, rsObj, "Customers");
dataGrid1.DataSource = myDataSet.Tables["Customers"].DefaultView;
}
catch(Exception ex)
{
MessageBox.Show("Error occured while retrieving the data: " +
ex.Message);
}
}
• Para carregar Form3 durante a inicialização da aplicação

o Abra o Solution Explorer, selecionando o comando de menu View | Solution Explorer

o Dê um clique com o botão direito do mouse em Form1.cs na Solution Explorer e


selecione View Code

o No arquivo fonte de Form1, localize o método Main()

o Para carregar Form3 quando a aplicação é executada, mude o parâmetro do método


Application.Run para Form3()
static void Main()
{
Application.Run(new Form3());
}
• Para compilar e rodar sua aplicação selecione o comando de menu Debug | Start Without
Debugging ou pressione CTRL+F5

• Para carregar os dados de cliente no controle DataGrid, clique no button Load Recordset

• Feche o Form3

Página 35 de 34
• Par fechar a solução do Visual Studio, selecione o comando de menu File | Exit

Resumo do Laboratório
Neste Lab você realizou os seguintes Exercícios:

• Entendendo o ADO.NET
• Trabalhando com os objetos DataSet e SqlDataAdapter
• Trabalhando com os objetos SqlDataReader e SqlCommand
• Inserindo, Atualizando e Excluindo registros usando um DataSet
• Carregando um Recordset nativo ADO em um DataSet

Página 36 de 34