Como actualizar uma base de dados de um objecto de DataSet utilizando 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 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.

815660
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Para obter uma Microsoft Visual C# .NET versão deste artigo, consulte 307587.

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

Este artigo faz referência à seguintes espaços de nomes Microsoft .NET Framework Class Library:
  • System.data
  • System.data.SqlClient

NESTA TAREFA

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.

back to the top

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)

back to the top

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

back to the top

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 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 mais informações sobre como utilizar ADO.NET, objectos de DataSet e SQL, visite os seguintes Web sites da Microsoft:
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
Esta informação foi útil?