Para una versión de Microsoft Visual Basic .NET de este artículo, consulte
301248.

Para una versión de Microsoft Visual C++ .NET de este artículo, consulte
815660.
En este artículo se refiere a los siguientes espacios de nombres de biblioteca de clases de Microsoft.NET Framework:

  • System.Data

  • System.Data.SqlClient

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 el Microsoft.NET Framework, son objetos en memoria que pueden almacenar tablas, vistas y relaciones.

Requisitos

La lista siguiente describe el hardware, software, infraestructura de red y service packs recomendados que necesita:

  • Microsoft Windows Server 2003, Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server o Microsoft Windows NT 4.0 Server

  • Instala la base de datos de ejemplo de Microsoft SQL Server versión 7.0, Microsoft SQL Server 2000 o Microsoft Data Engine (MSDE) con los PUBS

  • Microsoft Visual Studio 2005 o Microsoft Visual Studio .NET

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 utilizando .NET Visual C#
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 DataSet , 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 consta 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.

  2. Cree una nueva aplicación de consola en 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 para que no tienen que suministrar declaraciones de estos espacios de nombres más adelante en el código. Debe utilizar estas instrucciones antes que cualquier otra declaración.

    using System;
    using System.Data;
    using System.Data.SqlClient;
  4. Antes de poder modificar los datos y enviar que los cambios de nuevo a la base de datos, debe cargar la información en el conjunto de datos. Para el procedimiento detallado, consulte
    314145. para evitar la duplicación, el código de este paso no se presenta en detalle.

    La cadena de conexión en el código siguiente señala a un SQL Server que se encuentra en el equipo local (o el equipo donde se ejecuta el código) para resumir, se crea una conexión y, a continuación, se crea un adaptador de datos, que se utiliza para rellenar el DataSet con datos.
    Nota: Debe cambiar el ID de usuario < username > y < contraseña segura > a los valores correctos antes de ejecutar este código. Asegúrese de que el identificador de usuario tiene los permisos apropiados para realizar esta operación en la base de datos.

    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 muchas maneras de agregar una fila (o registro). Este ejemplo de código utiliza un procedimiento de tres pasos:

    • Obtenga un nuevo objeto DataRow de 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 fácil porque cargó el esquema de la tabla, así como los datos (la llamada a FillSchema en el paso 4). Con el esquema, la tabla sabe qué columna es su clave principal y el método Find de la colección Rows está disponible.

    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 tiene que incluir las modificaciones en BeginEdit y EndEdit, pero esto simplifica el trabajo que el DataSet tiene que realizar y permite al DataSet realizar sus comprobaciones de validación de forma simultánea una vez EndEdit llama. 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 tres propiedades con los objetos SqlCommand correspondientes manualmente, pero también puede utilizar Visual Studio .NET para generar estos tres comandos automáticamente.

    Para generar los comandos requeridos cuando son necesarios, debe crear una instancia del objeto SqlCommandBuilder y utilizar el DataAdapter en el constructor. Si desea utilizar este método, que se ilustra en el ejemplo de código, debe tener información de clave principal disponible para su tabla. Para tener acceso a información de clave principal, llame a FillSchemay a continuación, establezca la propiedad MissingSchemaAction de DataAdapter en AddWithKeyo establezca manualmente la clave principal en el código. Pegue el código siguiente 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 Rows contiene dos métodos, Remove y RemoveAt, que parecen eliminar la fila pero sólo quitan la fila 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 siguiente después del código de enviar cambios a 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. Enviar los cambios a SQL Server para quitar el registro que agregó 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 estado actual 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

¿Necesita más ayuda?

Ampliar sus conocimientos
Explorar los cursos
Obtener nuevas características primero
Unirse a Microsoft Insider

¿Le ha sido útil esta información?

¿Cuál es tu grado de satisfacción con la calidad del lenguaje?
¿Qué ha afectado a tu experiencia?

¡Gracias por sus comentarios!

×