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

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 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:
  • Microsoft Windows Server 2003, Windows 2000 Professional, Windows 2000 Server, Microsoft Windows 2000 Advanced Server ou Microsoft Windows NT 4.0 Server
  • Base de dados instalada de exemplo do Microsoft SQL Server versão 7.0, Microsoft SQL Server 2000 ou Microsoft Data Engine (MSDE) com os PUBS
  • Microsoft Visual Studio 2005 ou o 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 DataSet

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

Para ajudar a compreender neste artigo, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
314145Como preencher um objecto de DataSet a partir de uma base de dados utilizando o Visual C# .NET
Alguns dos tópicos são abrangidos 314145 incluem a obter dados a partir de uma base de dados e para um DataSet e como o DataSet é separados e distintos da base de dados.

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. Inicie o Visual Studio .NET ou o Visual Studio 2005.
  2. Crie uma nova aplicação de consola no Visual C#. Visual Studio cria uma classe estático por predefinição e um procedimento Main() vazio.
  3. Certifique-se de que o projecto contém uma referência para espaços de nomes System.data e de sistema . Utilize a instrução a utilizar 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 anteriores para quaisquer outros declarações.
    using System;
    using System.Data;
    using System.Data.SqlClient;
    					
  4. Antes de poder modificar os dados e submeter que as alterações efectuadas à base de dados, tem de carregar as informações em DataSet . Para obter o procedimento detalhado, consulte 314145. Para evitar duplicação, o código este passo não é apresentado detalhadamente.

    A cadeia de ligação as pontos de código seguinte para um servidor SQL que está localizado no computador local (ou o computador onde o código está a ser executado) para resumir, é criada uma ligação e, em seguida, uma placa de dados é criada, que é utilizado para preencher o DataSet com dados.
    Nota <username>Tem de alterar ID de utilizador <utilizador> e palavra-passe < palavra-passe segura > para os valores correctos antes de executar este código. Certifique-se que o ID de utilizador tem as permissões adequadas para efectuar esta operação na base de dados.
    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 ser modificada. Existem várias formas para adicionar uma linha (ou registo). Este código de exemplo utiliza um procedimento três passo:
    • Obter um novo objecto de DataRow de DataTable .
    • Defina os valores de campo DataRow conforme necessário.
    • 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 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 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 4). 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 ADD:
    //*****************
    // 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, 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, o que é ilustrado no código de exemplo a seguir, 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 seu ' DataAdapter ' para AddWithKey ou defina manualmente a chave primária no código. Cole o seguinte código após o código EDIT:
    //*****************
    // 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 uma linha completamente, utilize o método Eliminar o objecto de DataRow . Note que a colecção de linhas contém dois métodos, Remover e RemoveAt , que parece eliminar a linha, mas em vez disso, apenas remover a linha do conjunto. 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 SEND 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 para o SQL Server para remover o registo que adicionou anteriormente. Cole o seguinte código após o código DELETE:
    //*****************
    // 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 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.

Listagem de código completo

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 DataSet e SQL, visite os seguintes Web sites da Microsoft:
Consultar no acesso a dados (uma coluna Vozes da MSDN )
http://msdn2.microsoft.com/en-us/library/ms810288.aspx
ADO.NET para programadores de ADO
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ dndotnet/html/adonetprogmsdn.asp
MSDN online .NET Developer Center
http://msdn2.microsoft.com/en-us/netframework/default.aspx

Propriedades

Artigo: 307587 - Última revisão: quinta-feira, 29 de Março de 2007 - Revisão: 6.5
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: 
kbmt kbhowtomaster kbsqlclient kbsystemdata 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