Cómo actualizar una base de datos desde un objeto DataSet mediante Visual C# 2005 o Visual C# .NET

Seleccione idioma Seleccione idioma
Id. de artículo: 307587 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo paso a paso se muestra cómo tomar un conjunto de datos que contiene datos (que se cargan desde una base de datos), cómo modificar esos datos y, a continuación, cómo enviar de vuelta a la base de datos para actualizar el origen original.

Los objetos DataSet , una parte clave de acceso a datos en la Microsoft.NET Framework, son objetos en memoria que pueden contener tablas, vistas y relaciones.

Requisitos

La lista siguiente describe el hardware recomendado, software, infraestructura de red y service Pack que necesitan:
  • Microsoft Windows Server 2003, Microsoft Windows 2000 Server, Microsoft Windows 2000Professional, AdvancedServer de Microsoft Windows 2000 o Microsoft Windows NT 4.0 Server
  • Microsoft SQL Server versión 7.0, Microsoft SQL Server2000 o Microsoft Data Engine (MSDE) con las publicaciones de ejemplo databaseinstalled
  • Microsoft Visual Studio 2005 o Microsoft Visual Studio.
En este artículo se supone que está familiarizado con los temas siguientes:
  • Terminología de base de datos
  • Lenguaje de consulta estructurado (SQL)

Cómo actualizar una base de datos desde un objeto DataSet

En esta sección se muestra cómo utilizar el objeto DataSet para actualizar datos en una base de datos. Es importante recordar que también puede utilizar un objeto SqlCommand para insertar, actualizar y eliminar datos de una base de datos directamente.

Para ayudarle a entender este artículo, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
314145 Cómo llenar un objeto DataSet desde una base de datos mediante Visual C# .NET
Algunos de los temas que se tratan en 314145 se incluyen cómo recuperar datos de una base de datos y en un conjunto de datos, y cómo el conjunto de datos es independiente y distinto de la base de datos.

Una vez cargado el conjunto de datos , puede modificar los datos. El conjunto de datos hará un seguimiento de estos cambios. El objeto DataSet puede considerarse una caché en memoria de datos que se recuperan de una base de datos. El objeto DataSet se compone de una colección de tablas, relaciones y restricciones.

Para actualizar un conjunto de datos y devolver esas actualizaciones a la base de datos, siga estos pasos:
  1. Inicie Visual Studio .NET o Visual Studio 2005 de.
  2. Cree una nueva aplicación de consola Visual C#. Visual Studio crea una clase estática por defecto y un procedimiento Main() vacío.
  3. Asegúrese de que el proyecto contiene una referencia a los espacios de nombres System y System.Data . Utilice la instrucción using de los espacios de nombres System, System.Datay System.Data.SqlClient , por lo que no tiene que calificar declarationsfrom estos espacios de nombres más adelante en el código. Antes de estas instrucciones debe utilizar cualquier otra declaración.
    using System;
    using System.Data;
    using System.Data.SqlClient;
    					
  4. Antes de que puede modificar los datos y enviar el regreso de los cambios a la base de datos, debe cargar la información en el conjunto de datos. Para el procedimiento detallado, consulte314145. Para evitar la duplicación, el código de este stepis que no se presenta en detalle.

    La cadena de conexión en los puntos followingcode a un SQL Server que se encuentra en el equipo local (o computadora donde se ejecuta el código) para resumir, se crea una conexión, y un adaptador de datos se crea, que se utiliza para rellenar el DataSet con datos.
    Nota Debe cambiar el ID de usuario <username>y<strongpassword> a los valores correctos antes de ejecutar este código. Asegúrese de que el ID de thatUser tiene los permisos adecuados para realizar esta operación en la base de datos.</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. Ahora que los datos se cargan, se puede modificar. Hay muchos métodos para agregar una fila (o registro). Este ejemplo de código utiliza un stepprocedure de tres:
    • Obtener un nuevo objeto DataRow desde la DataTable.
    • Establezca los valores de campo DataRow según sea necesario.
    • Pase el nuevo objeto al método Add de la colección DataTable.Rows .
    Pegue el código siguiente después del código en el paso 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 modificar filas existentes, obtenga el objeto DataRow apropiado y, a continuación, proporcione nuevos valores para una o más columnas. Debe buscar primero la fila correcta, que es mucho más sencilla porque cargó el theschema de la tabla, así como los datos (la llamada a FillSchema en el paso 4). Con el esquema, la tabla sabe whichcolumn es su clave principal, y está disponible el método Find de la colección Rows .

    El método Find devuelve el objeto DataRow con un valor específico en su clave principal (en este caso, au_id). Cuando tenga ese DataRow, puede modificar las columnas. No es necesario ajustar themodifications en BeginEdit y EndEdit, pero esto simplifica el trabajo que tiene que hacer el conjunto de datos y permite al conjunto de datos realizar sus comprobaciones de validación simultáneamente cuando se llama a EndEdit . Pegue el código siguiente después del 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 la base de datos original con todos estos cambios, pase el DataSet en el método Update del objeto DataAdapter .

    Sin embargo, antes de poder llamar a Update, debe establecer las propiedades InsertCommand, UpdateCommandy DeleteCommand del objeto DataAdapter . Puede escribir SQL y llenar estas threeproperties con los objetos SqlCommand correspondientes manualmente, pero también puede utilizar Visual Studio .NET de a generatethese tres comandos automáticamente.

    Para generar el commandswhen necesario son necesarios, debe crear una instancia del objeto SqlCommandBuilder y utilizar el DataAdapter en el constructor. Si desea utilizar este método, que isillustrated en el ejemplo de código, debe tener informationavailable de clave principal para la tabla. Para tener acceso a la información de clave principal, llame a FillSchemay, a continuación, establezca la propiedad MissingSchemaAction de DataAdapter con el valor AddWithKeyo establezca manualmente la clave principal en el código. Pegue el código siguientes después del 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 completamente una fila, utilice el método Delete del objeto DataRow . Tenga en cuenta que la colección de filas contiene dos métodos, Remove y RemoveAt, que parecen eliminar la fila pero en su lugar simplemente quite el rowfrom de la colección. Sólo el método Delete envía la eliminación a la base de datos de origen. Pegue el código siguientes después del código de enviar los cambios al servidor de SQL:
    //*****************
    //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. Enviar los cambios a SQL Server para quitar las normales de registro agregada anteriormente. Pegue el código siguiente después del 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. Guardar el proyecto.
  11. En el menú Depurar , haga clic en Iniciar para ejecutar el proyecto. Observe que aparecen varios cuadros de mensajes, que indican el progreso del código y le permiten revisar el currentstate de los datos a medida que avanza el 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();         	
			
        }
    }
}
				

Referencias

Para obtener más información acerca de cómo utilizar ADO.NET, los objetos DataSet y SQL, visitan los siguientes sitios Web de Microsoft:
Diving into Data Access (una columna de MSDN Voices )
http://msdn2.Microsoft.com/en-us/library/ms810288.aspx
ADO.NET para el programador de ADO
http://msdn.Microsoft.com/en-us/library/ms973217.aspx
MSDN Online .NET Developer Center
http://msdn2.Microsoft.com/en-us/NETFramework/default.aspx

Propiedades

Id. de artículo: 307587 - Última revisión: martes, 29 de octubre de 2013 - Versión: 7.0
La información de este artículo se refiere a:
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Palabras clave: 
kbhowtomaster kbsqlclient kbsystemdata kbmt KB307587 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 307587

Enviar comentarios

 

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