Como atualizar um banco de dados de um objeto DataSet usando o Visual C++ .NET ou Visual C++ 2005

Traduções deste artigo Traduções deste artigo
ID do artigo: 815660 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Este artigo passo a passo mostra como tirar um DataSet que contém dados (que são carregados de um banco de dados), como modificar os dados e, em seguida, como enviá-lo de volta para o banco de dados para atualizar a fonte original.

objetos DataSet , uma parte fundamental do acesso a dados no Microsoft .NET Framework, são objetos na memória que podem conter tabelas, exibições e relações.

Requisitos

A lista a seguir descreve o hardware recomendado, software, infra-estrutura de rede e service packs que você precisa:
  • Um dos seguintes: Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Server ou Microsoft Windows NT 4.0 Server
  • Um dos seguintes: Microsoft SQL Server versão 7.0, Microsoft SQL Server 2000 ou Microsoft Data Engine (MSDE) com o banco de dados de exemplo PUBS instalado com as permissões apropriadas, UserID e senha valores.
  • Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005
Este artigo pressupõe que você esteja familiarizado com os seguintes tópicos:
  • Terminologia de banco de dados
  • Linguagem de consulta estruturada (SQL)


Como atualizar um banco de dados de um objeto de DataSet

Esta seção demonstra como usar o objeto de DataSet para atualizar dados em um banco de dados.

importante Você também pode usar um objeto SqlCommand para inserir, atualizar e excluir dados em um banco de dados diretamente.

Depois que o DataSet é carregada, você pode modificar os dados. O DataSet irá controlar essas alterações. O objeto DataSet pode ser considerado um cache na memória dos dados que são recuperados de um banco de dados. O objeto DataSet consiste em um conjunto de tabelas, relacionamentos e restrições.

Para atualizar um DataSet e enviar as atualizações de volta para o banco de dados, execute estas etapas:
  1. Abra o Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005.
  2. Crie um novo Aplicativo de C++ gerenciado no Visual C++ NET.. O Visual Studio cria uma função main() . Remove a função main() qualquer código gerado.
  3. Para adicionar uma referência aos namespaces System.Data e de sistema , adicione o código a seguir
    #using <System.Dll>
    #using <System.Data.Dll>
    #using <System.Xml.Dll>
  4. Use a instrução USING sobre os espaços para nome System.Data.SqlClient , System.Data e sistema para que não é necessário para qualificar declarações desses namespaces posteriormente no seu código. Você deve usar estas instruções antes de qualquer outra declaração.
    using namespace System;
    using namespace System::Data;
    using namespace System::Xml;
    using namespace System::Data::SqlClient;
    
  5. Antes de modificar os dados e enviar que as alterações de volta para o banco de dados, você deve carregar as informações em DataSet .

    A seqüência de conexão no código a seguir aponta para um SQL Server que está localizado no computador local (ou o computador onde o código está sendo executado). Substitua esta seqüência de caracteres por suas próprias configurações.

    Para resumir, uma conexão é criada, e um adaptador de dados é criado, que é usado para preencher o DataSet com dados.
    SqlConnection  *objConn;
    String *sConnectionString;
    sConnectionString = "Password=StrongPassword;User ID=UserName;Initial Catalog=pubs;Data Source=(local)";
    
    objConn = new SqlConnection(sConnectionString);
    objConn->Open();
            
    // Create an instance of a DataAdapter.
    SqlDataAdapter* daAuthors = new SqlDataAdapter("Select * From Authors", objConn);
    
    // Create an instance of a DataSet, and retrieve data from the Authors table.
    DataSet* dsPubs = new DataSet("Pubs");
    daAuthors->FillSchema(dsPubs,SchemaType::Source, "Authors");
    daAuthors->Fill(dsPubs,"Authors");
    
    Observação você deve adicionar o common language runtime oferecem suporte a compilador opção (/ CLR: oldSyntax) no Visual C++ 2005 a compilar com êxito o exemplo de código anterior. Para adicionar a opção de compilador de suporte de tempo de execução idioma comum no Visual C++ 2005, siga estas etapas:
    1. Clique em Project e clique em <ProjectName> propriedades .

      Observação <ProjectName> é um espaço reservado para o nome do projeto.
    2. Expanda Configuration Properties e, em seguida, clique em Geral .
    3. Clique para selecionar Common Language Runtime suporte, sintaxe antiga (/ CLR: oldSyntax) no projeto oferece suporte a Common Language Runtime configuração no painel à direita, clique em Aplicar e em seguida, clique em OK .
    Para obter mais informações sobre o common language runtime oferece suporte à opção do compilador, visite o seguinte site da Microsoft:
    / clr (Common Language Runtime Compilation)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
    Estas etapas se aplicam o artigo inteiro.
  6. Agora que os dados são carregados, você pode modificá-lo. Há várias maneiras para adicionar uma linha (ou registro). Este exemplo de código usa um procedimento três etapas:
    1. Obtenha um novo objeto DataRow DataTable .
    2. Defina os valores de campo DataRow conforme necessário.
    3. Passe esse novo objeto para o método Add da coleção DataTable.Rows .

    Cole o seguinte código após o código na etapa 5:
    // BEGIN ADD CODE 
    // Create a new instance of a DataTable.
    DataTable* tblAuthors = dsPubs->Tables->Item["Authors"];
    
    
    // Obtain a new DataRow object from the DataTable.
    DataRow* drCurrent = tblAuthors->NewRow();
    
    // Set the DataRow field values as necessary.
    drCurrent->set_Item("au_id",new String("993-21-3427"));
    
    drCurrent->set_Item("au_fname",new String("George"));
    drCurrent->set_Item("au_lname",new String("Johnson"));
    drCurrent->set_Item("phone",new String("800 226-0752"));
    drCurrent->set_Item("address", new String ("1956 Arlington Pl."));
    drCurrent->set_Item("city", new String("Winnipeg"));
    drCurrent->set_Item("state", new String("MB"));
    drCurrent->set_Item("contract",__box(1));
    
    // Pass that new object into the Add method of the DataTable.
    tblAuthors->Rows->Add(drCurrent);
    Console::WriteLine("Add was successful, Click any key to continue!!");
    Console::ReadLine();
    
    // END ADD CODE  
    
  7. Para editar linhas existentes, obtenha o objeto DataRow apropriado e fornecer novos valores para uma ou mais colunas. Primeiro você deve localizar a linha correta, que é muito mais fácil porque você carregou o esquema da tabela, bem como os dados (a chamada para FillSchema na etapa 5). Com o esquema no lugar, a tabela sabe qual coluna é sua chave primária e o método Find da coleção de linhas está disponível.

    O método Find retorna o objeto DataRow com um valor específico na sua chave primária (no caso, au_id). Depois de ter que DataRow , você pode modificar as colunas. Não é necessário que quebrar as modificações no BeginEdit e EndEdit , mas isso simplifica o trabalho que o DataSet tem a ver e permite que o DataSet executar suas verificações de validação simultaneamente quando EndEdit é chamado.

    Cole o seguinte código após o código na etapa 6:
    // BEGIN EDIT CODE 
    
    drCurrent = tblAuthors->Rows->Find(new String("213-46-8915"));
    drCurrent->BeginEdit();
    
    drCurrent->set_Item("phone",String::Concat(S"342",(static_cast<String *>(drCurrent->Item["phone"]))->Substring(3)));
    drCurrent->EndEdit ();
    Console::WriteLine("Record edited successfully, Click any key to continue!!");
    Console::ReadLine();
    
    // END EDIT CODE
    
  8. Para atualizar o banco de dados original com todas essas alterações, passe o DataSet para o método Update do objeto DataAdapter .

    No entanto, antes de chamar Update , você deve definir as propriedades InsertCommand , UpdateCommand e DeleteCommand do objeto DataAdapter . Você pode escrever SQL e preencher essas três propriedades com os objetos correspondentes do SqlCommand manualmente, mas você também pode usar o Visual Studio .NET para gerar esses três comandos automaticamente.

    Para gerar os comandos necessários quando forem necessários, você deve criar uma instância do objeto SqlCommandBuilder e use o DataAdapter no construtor. Se você desejar usar esse método (mostrado no exemplo de código que segue), você deve ter informações de chave primária disponíveis para a sua tabela. Para acessar informações de chave primária, chamada FillSchema e em seguida, defina a propriedade MissingSchemaAction do DataAdapter para AddWithKey ou definir manualmente a chave primária no seu código.

    Cole o seguinte código após o código na etapa 7.
    // BEGIN SEND CHANGES TO SQL SERVER 
    
    SqlCommandBuilder* objCommandBuilder = new SqlCommandBuilder(daAuthors);
    daAuthors->Update(dsPubs, "Authors");
    Console::WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
    Console::ReadLine();
    
    // END SEND CHANGES TO SQL SERVER 
    
  9. Para excluir uma linha completamente, use o método Delete do objeto DataRow .

    Observação A coleção Rows contém dois métodos, Remove e RemoveAt , que parecer excluir a linha, mas em vez disso, remover apenas a linha da coleção. Somente o método Delete envia sua exclusão de volta ao banco de dados de origem.

    Cole o seguinte código após o código na etapa 8:
    //BEGIN DELETE CODE 
    
    drCurrent = tblAuthors->Rows->Find(new String("993-21-3427"));
    drCurrent->Delete();
    Console::WriteLine("Record deleted successfully, Click any key to continue!!"); 
    Console::ReadLine();
    
    //END DELETE CODE  
    
  10. Envie as alterações para SQL Server para remover o registro que você adicionou anteriormente.

    Cole o seguinte código após o código na etapa 9:
    // CLEAN UP SQL SERVER
    daAuthors->Update(dsPubs, "Authors");
    Console::WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
    Console::ReadLine();
    objConn->Close ();
    
  11. Salve seu projeto.
  12. No menu Debug , clique em Iniciar para executar o projeto.

    Observe que várias caixas de mensagem aparecerem, que indicar o andamento do código e permitem que você revise o estado atual dos dados conforme o andamento do código.


Concluir a listagem de código

// This is the main project file for VC++ application project 
// generated using an Application Wizard.

#include "stdafx.h"

#using <mscorlib.dll>
#using <System.Dll>
#using <System.Data.Dll>
#using <System.Xml.dll>
#include <tchar.h>

using namespace System;
using namespace System::Xml;
using namespace System::Data;
using namespace System::Data::SqlClient;

// This is the entry point for this application
int _tmain(void)
{
    SqlConnection  *objConn;
    try
    {
        String *sConnectionString;
        sConnectionString = "Password=StrongPassword;User ID=UserName;Initial Catalog=pubs;Data Source=(local)";

        objConn = new SqlConnection(sConnectionString);
        objConn->Open();
        
        // Create an instance of a DataAdapter.
        SqlDataAdapter* daAuthors = new SqlDataAdapter("Select * From Authors", objConn);

        // Create an instance of a DataSet, and retrieve data from the Authors table.
        DataSet* dsPubs = new DataSet("Pubs");
        daAuthors->FillSchema(dsPubs,SchemaType::Source, "Authors");
        daAuthors->Fill(dsPubs,"Authors");

        // BEGIN ADD CODE 
        // Create a new instance of a DataTable.
        DataTable* tblAuthors = dsPubs->Tables->Item["Authors"];


        // Obtain a new DataRow object from the DataTable.
        DataRow* drCurrent = tblAuthors->NewRow();

        // Set the DataRow field values as necessary.
        drCurrent->set_Item("au_id",new String("993-21-3427"));

        drCurrent->set_Item("au_fname",new String("George"));
        drCurrent->set_Item("au_lname",new String("Johnson"));
        drCurrent->set_Item("phone",new String("800 226-0752"));
        drCurrent->set_Item("address", new String ("1956 Arlington Pl."));
        drCurrent->set_Item("city", new String("Winnipeg"));
        drCurrent->set_Item("state", new String("MB"));
        drCurrent->set_Item("contract",__box(1));

        // Pass that new object into the Add method of the DataTable.
        tblAuthors->Rows->Add(drCurrent);
        Console::WriteLine("Add was successful, Click any key to continue!!");
        Console::ReadLine();

        // END ADD CODE  
        
        // BEGIN EDIT CODE 

        drCurrent = tblAuthors->Rows->Find(new String("213-46-8915"));
        drCurrent->BeginEdit();

        drCurrent->set_Item("phone",String::Concat(S"342",(static_cast<String *>(drCurrent->Item["phone"]))->Substring(3)));
        drCurrent->EndEdit ();
        Console::WriteLine("Record edited successfully, Click any key to continue!!");
        Console::ReadLine();

        // END EDIT CODE

        // BEGIN SEND CHANGES TO SQL SERVER 

        SqlCommandBuilder* objCommandBuilder = new SqlCommandBuilder(daAuthors);
        daAuthors->Update(dsPubs, "Authors");
        Console::WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
        Console::ReadLine();

        // END SEND CHANGES TO SQL SERVER 

        //BEGIN DELETE CODE 

        drCurrent = tblAuthors->Rows->Find(new String("993-21-3427"));
        drCurrent->Delete();
        Console::WriteLine("SRecord deleted successfully, Click any key to continue!!"); 
        Console::ReadLine();

        //END DELETE CODE  


        // CLEAN UP SQL SERVER
        daAuthors->Update(dsPubs, "Authors");
        Console::WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
        Console::ReadLine();
    }
    catch (Exception* ex)
    {
        Console::WriteLine (ex->Message );
    }
    __finally
    {
        objConn->Close ();
    }
}


Referências

Para obter mais informações sobre como usar o ADO.NET, objetos DataSet e SQL, visite os seguintes sites:

Propriedades

ID do artigo: 815660 - Última revisão: segunda-feira, 19 de março de 2007 - Revisão: 5.2
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
Palavras-chave: 
kbmt kbsystemdata kbsqlclient kbhowtomaster kbhowto KB815660 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 815660

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com