Como actualizar uma base de dados de um objecto de DataSet utilizando o Visual C++ .NET ou Visual C++ 2005

Traduções de Artigos Traduções de Artigos
Artigo: 815660 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo passo a passo mostra como efectuar um DataSet que contém dados (que são carregados a partir de uma base de dados), como modificar os dados e, em seguida, como enviá-lo novamente para a actualizar a origem da base de dados.

objectos DataSet , uma parte de chave de acesso a dados no Microsoft .NET Framework, são objectos na memória que podem conter tabelas, vistas e relações.

Requisitos

A lista seguinte descreve o hardware recomendado, software, infra-estrutura de rede e service packs que necessita:
  • Um dos seguintes: Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced 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 a base de dados de exemplo PUBS instalado com as permissões adequadas, ID de utilizador e palavra-passe valores.
  • Microsoft Visual Studio .NET ou o Microsoft Visual Studio 2005
Este artigo pressupõe que está familiarizado com os seguintes tópicos:
  • Terminologia de base de dados
  • Linguagem de consulta estruturada (SQL)


Como actualizar uma base de dados de um objecto de DataSet

Esta secção demonstra como utilizar o objecto de DataSet para actualizar dados numa base de dados.

importante Também pode utilizar um objecto SqlCommand para inserir, actualizar e eliminar dados numa base de dados directamente.

Depois do DataSet é carregada, pode modificar os dados. O DataSet irá controlar estas alterações. O objecto de DataSet pode ser considerado uma cache de memória dos dados que são obtidos a partir de uma base de dados. O objecto de DataSet consiste um conjunto de tabelas, relações e restrições.

Para actualizar um DataSet e enviar as actualizações para a base de dados, siga estes passos:
  1. Abra o Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005.
  2. Crie uma nova Aplicação C++ gerida no Visual C++. NET. O Visual Studio cria uma função main() . Remove qualquer código gerado a função main() .
  3. Para adicionar uma referência para espaços de nomes System.data e de sistema , adicione o seguinte código
    #using <System.Dll>
    #using <System.Data.Dll>
    #using <System.Xml.Dll>
  4. Utilize a instrução USING espaços de nomes System.data.SqlClient , System.data e sistema para que não é necessário para qualificar declarações destes espaços de nomes mais tarde no código. Tem de utilizar estas instruções antes de quaisquer outras declarações.
    using namespace System;
    using namespace System::Data;
    using namespace System::Xml;
    using namespace System::Data::SqlClient;
    
  5. Antes de poder modificar os dados e submeter que as alterações efectuadas à base de dados, tem de carregar as informações em DataSet .

    A cadeia de ligação no seguinte código aponta para um servidor de SQL que está localizado no computador local (ou o computador onde o código está a ser executado). Substitua esta cadeia as suas próprias definições.

    Para resumir, é criada uma ligação e, em seguida, uma placa de dados é criada, que é utilizado 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");
    
    Nota tem de adicionar o common language runtime suportam a opção do compilador (/ clr:oldSyntax) no Visual C++ 2005 a compilação com êxito o anterior exemplo de código. Para adicionar a opção de compilador do suporte de tempo de execução idioma comum no Visual C++ 2005, siga estes passos:
    1. Clique em Project e, em seguida, clique em <ProjectName> propriedades .

      Nota <ProjectName> é um marcador de posição para o nome do projecto.
    2. Expanda Propriedades de configuração e, em seguida, clique em Geral .
    3. Clique para seleccionar Runtime do idioma comum suporte, sintaxe antigo (/ clr:oldSyntax) na definição de projecto Common Language Runtime suporte no painel da direita, clique em Aplicar e, em seguida, clique em OK .
    Para obter mais informações sobre o common language runtime suporte a opção do compilador, visite o seguinte Web site da Microsoft:
    / clr (Common Language Runtime compilação)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
    Estes passos aplicam-se para o artigo completo.
  6. Agora que os dados são carregados, pode ser modificada. Existem várias formas para adicionar uma linha (ou registo). Este código de exemplo utiliza um procedimento de três passos:
    1. Obter um novo objecto de DataRow de DataTable .
    2. Defina os valores de campo DataRow conforme necessário.
    3. Passe esse objecto novo para o método Add da colecção DataTable.Rows .

    Cole o seguinte código após o código no passo 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, obter o objecto de DataRow apropriado e, em seguida, fornecer novos valores para uma ou mais colunas. Primeiro tem localize a linha correcta, o que é muito mais fácil porque carregar o esquema da tabela, bem como os dados (a chamada FillSchema no passo 5). Com o esquema no local, a tabela que sabe que a coluna é a chave primária e o método de localização da colecção de linhas está disponível.

    O método Localizar devolve o objecto de DataRow com um valor específico na respectiva chave primária (neste caso, id_au). Depois de ter que DataRow , pode modificar as colunas. Não é preciso que moldar as modificações no BeginEdit e EndEdit , mas Isto simplifica o trabalho que o DataSet tem a ver e permite que o DataSet efectuar simultaneamente as verificações de validação quando EndEdit é chamado.

    Cole o seguinte código após o código no passo 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 actualizar a base de dados original com todas estas alterações, de passar o DataSet para o método Update do objecto ' DataAdapter ' .

    No entanto, para poder chamar actualização , tem de definir as propriedades InsertCommand , UpdateCommand e DeleteCommand do objecto ' DataAdapter ' . Pode manualmente escrever SQL e preencher estes três propriedades com objectos SqlCommand correspondentes, mas também pode utilizar Visual Studio .NET para gerar automaticamente estes três comandos.

    Para gerar os comandos necessários quando forem necessários, tem de criar uma instância do objecto SqlCommandBuilder e utilize o ' DataAdapter ' no construtor. Se pretender utilizar este método (mostrado no exemplo de código que se segue), tem de ter informações da chave primárias disponíveis para a tabela. Para aceder a informações da chave primárias, chamada FillSchema e, em seguida, defina a propriedade MissingSchemaAction do DataAdapter para AddWithKey ou defina manualmente a chave primária no código.

    Cole o seguinte código após o código no passo 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 eliminar uma linha completamente, utilize o método Eliminar o objecto de DataRow .

    Nota A colecção de linhas contém dois métodos, Remover e RemoveAt , que parece eliminar a linha mas em vez disso, remove apenas a linha da colecção. Apenas o método delete envia a eliminação de volta para base de dados de origem.

    Cole o seguinte código após o código no passo 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 o SQL Server para remover o registo que adicionou anteriormente.

    Cole o seguinte código após o código no passo 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. Guarde o projecto.
  12. No menu Debug , clique em Iniciar para executar o projecto.

    Repare que aparecem várias caixas de mensagem, que indicar o progresso do código e permitem-lhe rever o estado actual dos dados à medida que a código decorre.


Concluir lista 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 mais informações sobre como utilizar ADO.NET, objectos de DataSet e SQL, visite os seguintes Web sites da Microsoft:

Propriedades

Artigo: 815660 - Última revisão: 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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