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

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
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Para obter uma Microsoft Visual translation from VPE for Csharp .NET versão deste artigo, consulte 307587.

Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 301248.

Este artigo se refere aos seguintes namespaces Microsoft .NET Framework Class Library:
  • System.Data
  • System.Data.SqlClient

NESTA TAREFA

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.

back to the top

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)

back to the top

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 SERVERdaAuthors->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.

back to the top

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 applicationint _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 ();    }}


back to the top
Referências
Para obter mais informações sobre como usar o ADO.NET, objetos DataSet e SQL, visite os seguintes sites:
back to the top

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 815660 - Última Revisão: 01/17/2015 06:43:56 - Revisão: 5.2

Microsoft Visual C++ 2005 Express Edition, Microsoft Visual C++ .NET 2002 Standard Edition

  • kbnosurvey kbarchive kbmt kbsystemdata kbsqlclient kbhowtomaster kbhowto KB815660 KbMtpt
Comentários