Como actualizar uma base de dados de um objecto de conjunto de dados utilizando o Visual c# 2005 ou o Visual c# .NET

Traduções de Artigos Traduções de Artigos
Artigo: 307587 - 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 colocar um DataSet que contém dados (que são carregados a partir de uma base de dados), como modificar esses dados e, em seguida, como enviá-lo na base de dados para actualizar a origem original.

Objectos de conjunto de dados , uma peça chave de acesso a dados no Microsoft .NET Framework, são objectos de 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 de:
  • Microsoft Windows Server 2003, Microsoft Windows 2000Professional, Microsoft Windows 2000 Server, AdvancedServer do Microsoft Windows 2000 ou Microsoft Windows NT 4.0 Server
  • Databaseinstalled de exemplo do Microsoft SQL Server versão 7.0, Server2000 de SQL da Microsoft ou Microsoft Data Engine (MSDE) com os PUBS
  • Microsoft Visual Studio 2005 ou Microsoft Visual Studio.NET
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 conjunto de dados

Esta secção demonstra como utilizar o objecto de conjunto de dados para actualizar dados numa base de dados. É importante lembrar-se de que também pode utilizar um objecto SqlCommand para inserir, actualizar e eliminar dados numa base de dados directamente.

Para ajudar a compreender o presente artigo, clique no número de artigo abaixo para visualizar o artigo na Microsoft Knowledge Base:
314145 Como preencher um objecto de conjunto de dados de uma base de dados utilizando o Visual c# .NET
Alguns dos tópicos que são abrangidos pela 314145 inclua como obter dados de uma base de dados e para um conjunto de dadose em que o DataSet é separada e distinta da base de dados.

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

Para actualizar um conjunto de dados e enviar essas actualizações na base de dados, siga estes passos:
  1. Inicie o Visual Studio 2005 ou o Visual Studio .NET.
  2. Crie uma nova aplicação de consola no Visual c#. VisualStudio cria uma classe estática por predefinição e um procedimento de Main() vazio.
  3. Certifique-se de que o projecto contém uma referência para os espaços de nomes do sistema e System. data . Utilize a instrução a utilizar os espaços de nomes do sistema, System. datae System.Data.SqlClient para que não é necessário para qualificar declarationsfrom estes espaços de nomes mais tarde no código. Tem de utilizar quaisquer outras declarações definir estas instruções.
    using System;
    using System.Data;
    using System.Data.SqlClient;
    					
  4. Antes de poder modificar os dados e submeter a Anteriorpara de alterações da base de dados, tem de carregar as informações no DataSet. Para obter o procedimento detalhado, consulte314145. Para evitar duplicações, o código neste stepis não são apresentados detalhadamente.

    A cadeia de ligação nos pontos followingcode a um servidor de SQL que está localizado no computador local (ou thecomputer em que a execução do código) para resumir, é criada uma ligação, andthen uma placa de dados é criada, que é utilizada para preencher o conjunto de dados com dados.
    Nota Tem de alterar o ID de utilizador <username>e<strongpassword> de palavra-passe para os valores correctos antes de executar este código. Certifique-se de ID de thatUser tem as permissões apropriadas para efectuar esta operação numa base.</strongpassword> </username>
    string sConnectionString;
    
    // Modify the following string to correctly connect to your SQL Server.
    sConnectionString = "Password=<strong password>;User ID=<username>;"
    	+ "Initial Catalog=pubs;"
    	+ "Data Source=(local)";
    
    SqlConnection 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");
    					
  5. Agora que os dados são carregados, pode modificá-lo. Não existem formas de aremany para adicionar uma linha (ou registo). Este exemplo de código utiliza um stepprocedure três:
    • Obter um novo objecto de DataRow de DataTable.
    • Defina os valores de campo de DataRow conforme necessário.
    • Transmitir esse objecto de novo para o método Add da colecção DataTable.Rows .
    Cole o código seguinte após o código no passo 4:
    //****************
    // BEGIN ADD CODE 
    // Create a new instance of a DataTable.
    DataTable tblAuthors;
    tblAuthors = dsPubs.Tables["Authors"];
    
    DataRow drCurrent;
    // Obtain a new DataRow object from the DataTable.
    drCurrent = tblAuthors.NewRow();
    
    // Set the DataRow field values as necessary.
    drCurrent["au_id"] = "993-21-3427";
    drCurrent["au_fname"] = "George";
    drCurrent["au_lname"] = "Johnson";
    drCurrent["phone"] = "800 226-0752";
    drCurrent["address"] = "1956 Arlington Pl.";
    drCurrent["city"] = "Winnipeg";
    drCurrent["state"] = "MB";
    drCurrent["contract"] = 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  
    					
  6. Para editar as linhas existentes, obtenha o objecto de DataRow apropriado e, em seguida, forneça novos valores para uma ou mais colunas. Youmust primeiro localize a linha correcta, o que é muito mais fácil uma vez que é carregada a theschema da tabela, bem como os dados (a chamada para FillSchema no passo 4). Com o esquema no local, a tabela que se sabe whichcolumn é a respectiva chave primária e o método de localização da colecção de linhas está disponível.

    O método de Localizar devolve o objecto de DataRow com um valor específico na sua chave primária (neste caso, id_au). Depois de ter que DataRow, pode modificar as colunas. Não é necessário que moldar themodifications BeginEdit e EndEdit, mas Isto simplifica o trabalho que o DataSet tem a ver e permite o conjunto de dados efectuar as suas verificações de validação simultaneamente quando EndEdit é chamado. Cole o código seguinte após o código de adicionar:
    //*****************
    // BEGIN EDIT CODE 
    
    drCurrent = tblAuthors.Rows.Find("213-46-8915");
    drCurrent.BeginEdit();
    drCurrent["phone"] = "342" + drCurrent["phone"].ToString().Substring(3);
    drCurrent.EndEdit();
    Console.WriteLine("Record edited successfully, Click any key to continue!!");
    Console.ReadLine();
    
    // END EDIT CODE  
    					
  7. Para actualizar a base de dados original com todas estas alterações, filtrar o conjunto de dados para o método de actualização do objecto ' DataAdapter ' .

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

    Para gerar o commandswhen necessário forem necessários, tem de criar uma instância do objecto SqlCommandBuilder e utilizar o ' DataAdapter ' no construtor. Se pretender utilizar este método, que isillustrated no código de exemplo a seguir, tem de ter informationavailable de chave primária para a tabela. Para aceder a informações da chave primárias, chamada FillSchemae, em seguida, defina a propriedade de MissingSchemaAction do DataAdapter para AddWithKeyou definir manualmente a chave primária no código. Cole o código de thefollowing após o código de edição:
    //*****************
    // 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
    					
  8. Para eliminar completamente uma linha, utilize o método Delete do objeto DataRow . Note que a colecção de linhas contém dois métodos, Remover e RemoveAt, que pareçam eliminar a linha, mas em vez disso, remove apenas o rowfrom a colecção. Apenas o método Delete envia a eliminação para a base de dados de origem. Cole o código de thefollowing após o código enviar alterações para SQL SERVER:
    //*****************
    //BEGIN DELETE CODE 
    
    drCurrent = tblAuthors.Rows.Find("993-21-3427");
    drCurrent.Delete();
    Console.WriteLine("Record deleted successfully, Click any key to continue!!"); 
    Console.ReadLine();
    
    //END DELETE CODE 
    					
  9. Envie as alterações ao SQL Server para remover o queutilize de registo adicionado anteriormente. Cole o código seguinte após o código de eliminação:
    //*****************
    // CLEAN UP SQL SERVER
    daAuthors.Update(dsPubs, "Authors");
    Console.WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
    Console.ReadLine();
    					
  10. Guarde o projecto.
  11. No menu Depurar , clique em Iniciar para executar o projecto. Repare que aparecem várias caixas de mensagem, que indicam o progresso do código e permitem-lhe rever o estado actual dos dados que a decorre de código.

Lista de código completa

using System;
using System.Data;
using System.Data.SqlClient;

namespace PopulateDataSet
{

    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        static void Main(string[] args)
        {
            string sConnectionString;

            // Modify the following string to correctly connect to your SQL Server.
            sConnectionString = "Password=;User ID=sa;"
                + "Initial Catalog=pubs;"
                + "Data Source=(local)";

            SqlConnection 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;
            tblAuthors = dsPubs.Tables["Authors"];

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

            // Set the DataRow field values as necessary.
            drCurrent["au_id"] = "993-21-3427";
            drCurrent["au_fname"] = "George";
            drCurrent["au_lname"] = "Johnson";
            drCurrent["phone"] = "800 226-0752";
            drCurrent["address"] = "1956 Arlington Pl.";
            drCurrent["city"] = "Winnipeg";
            drCurrent["state"] = "MB";
            drCurrent["contract"] = 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("213-46-8915");
            drCurrent.BeginEdit();
            drCurrent["phone"] = "342" + drCurrent["phone"].ToString().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("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();         	
			
        }
    }
}
				

Referências

Para mais informações sobre como utilizar ADO.NET, objectos de conjunto de dados e SQL, visite os seguintes Web sites da Microsoft:
Mergulho acesso a dados (uma coluna de Vozes da MSDN )
http://msdn2.microsoft.com/en-us/library/ms810288.aspx
ADO.NET para o programador do ADO
http://msdn.microsoft.com/en-us/library/ms973217.aspx
MSDN Online .NET Developer Center
http://msdn2.microsoft.com/en-us/netframework/default.aspx

Propriedades

Artigo: 307587 - Última revisão: 29 de outubro de 2013 - Revisão: 7.0
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Palavras-chave: 
kbhowtomaster kbsqlclient kbsystemdata kbmt KB307587 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: 307587

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