Tutorial: Manipular datos (C#) (LINQ to SQL)

Actualización: November 2007

Este tutorial proporciona un escenario completo fundamental de LINQ to SQL para agregar, modificar y eliminar datos en una base de datos. Utilizará una copia de la base de datos de ejemplo Northwind para agregar un cliente, cambiar el nombre de un cliente y eliminar un pedido.

Nota:

Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio incluidos en las instrucciones siguientes. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos. Para obtener más información, vea Valores de configuración de Visual Studio.

Este tutorial se escribió con la configuración de desarrollo de Visual C#.

Requisitos previos

En este tutorial se requiere lo siguiente:

  • Este tutorial utiliza una carpeta dedicada ("c:\linqtest6") que contiene los archivos. Cree esta carpeta antes de empezar el tutorial.

  • Base de datos de ejemplo Northwind.

    Si no dispone de esta base de datos en el equipo de desarrollo, puede descargarla del sitio web de descargas de Microsoft. Para obtener instrucciones, vea Descargar bases de datos de ejemplo (LINQ to SQL). Después de haber descargado la base de datos, copie el archivo northwnd.mdf en la carpeta c:\linqtest6.

  • Un archivo de código de C# generado a partir de la base de datos Northwind.

    Puede generar este archivo mediante el Diseñador relacional de objetos o la herramienta SQLMetal. Este tutorial se escribió utilizando la herramienta SQLMetal con la línea de comandos siguiente:

    sqlmetal /code:"c:\linqtest6\northwind.cs" /language:csharp "C:\linqtest6\northwnd.mdf" /pluralize

    Para obtener más información, vea Herramienta de generación de código (SqlMetal.exe).

Información general

Este tutorial se compone de seis tareas principales:

  • Crear la solución LINQ to SQL en Visual Studio.

  • Agregar el archivo de código de la base de datos al proyecto.

  • Crear el nuevo objeto de cliente.

  • Modificar el nombre de contacto de un cliente.

  • Eliminar un pedido.

  • Enviar estos cambios a la base de datos Northwind.

Crear una solución LINQ to SQL

En esta primera tarea, va a crear una solución de Visual Studio que contiene las referencias necesarias para generar y ejecutar un proyecto de LINQ to SQL.

Para crear una solución LINQ to SQL

  1. En el menú Archivo de Visual Studio, elija Nuevo y, a continuación, haga clic en Proyecto.

  2. En el panel Tipos de proyecto del cuadro de diálogo Nuevo proyecto, haga clic en Visual C#.

  3. En el panel Plantillas, haga clic en Aplicación de consola.

  4. En el cuadro Nombre, escriba LinqDataManipulationApp.

  5. En el cuadro Ubicación, compruebe dónde desea almacenar los archivos de proyecto.

  6. Haga clic en Aceptar.

Agregar referencias y directivas LINQ

En este tutorial se usan ensamblados que podrían no estar instalados en el proyecto de forma predeterminada. Si System.Data.Linq no se incluye como referencia en el proyecto, agréguelo, como se explica en los pasos siguientes:

Para agregar System.Data.Linq

  1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en Referencias y, a continuación, haga clic en Agregar referencia.

  2. En el cuadro de diálogo Agregar referencia, haga clic en .NET, en el ensamblado System.Data.Linq y, a continuación, en Aceptar.

    El ensamblado se agrega al proyecto.

  3. Agregue las directivas siguientes al principio de Program.cs:

    using System.Data.Linq;
    using System.Data.Linq.Mapping;
    

Agregar el archivo de código de Northwind al proyecto

En estos pasos se asume que ha utilizado la herramienta SQLMetal para generar un archivo de código a partir de la base de datos de ejemplo Northwind. Para obtener más información, vea la sección Requisitos previos, anteriormente en este tutorial.

Para agregar el archivo de código de Northwind al proyecto

  1. En el menú Proyecto, haga clic en Agregar elemento existente.

  2. En el cuadro de diálogo Agregar elemento existente, vaya a c:\linqtest6\northwind.cs y, a continuación, haga clic en Agregar.

    El archivo northwind.cs se agrega al proyecto.

Configurar la conexión a la base de datos

Primero, pruebe su conexión a la base de datos. Observe en particular que la base de datos, Northwnd, no tiene la i. Si se generan errores en los pasos siguientes, revise el archivo northwind.cs para determinar cómo se escribe el nombre de la clase parcial de Northwind.

Para configurar y probar la conexión a la base de datos

  1. Escriba o pegue el código siguiente en el método Main, en la clase Program:

    // Use the following connection string.
    Northwnd db = new Northwnd(@"c:\linqtest6\northwnd.mdf");
    
    // Keep the console window open after activity stops.
    Console.ReadLine();
    
  2. Presione F5 para probar la aplicación en este punto.

    Se abre una ventana Consola.

    Para cerrar la aplicación, presione Entrar en la ventana Consola o haga clic en Detener depuración en el menú Depurar de Visual Studio.

Crear una nueva entidad

Crear entidades es sencillo. Puede crear objetos (como Customer) mediante la palabra clave new.

En esta sección y las siguientes, realizará cambios sólo en la memoria caché local. No se enviarán cambios a la base de datos hasta que llame a SubmitChanges, casi al final del tutorial.

Para agregar un nuevo objeto de entidad Customer

  1. Cree un nuevo Customer agregando el código siguiente delante de Console.ReadLine(); en el método Main:

    // Create the new Customer object.
    Customer newCust = new Customer();
    newCust.CompanyName = "AdventureWorks Cafe";
    newCust.CustomerID = "ADVCA";
    
    // Add the customer to the Customers table.
    db.Customers.InsertOnSubmit(newCust);
    
    Console.WriteLine("\nCustomers matching CA before insert");
    
    foreach (var c in db.Customers.Where(cust => cust.CustomerID.Contains("CA")))
    {
        Console.WriteLine("{0}, {1}, {2}",
            c.CustomerID, c.CompanyName, c.Orders.Count);
    }
    
  2. Presione F5 para depurar la solución.

  3. Presione Entrar en la ventana Consola para detener la depuración y continuar el tutorial.

Actualizar una entidad

En los pasos siguientes, recuperará un objeto Customer y modificará una de sus propiedades.

Para cambiar el nombre de un cliente

  • Agregue el código siguiente encima de Console.ReadLine();:

    // Query for specific customer.
    // First() returns one object rather than a collection.
    var existingCust =
        (from c in db.Customers
         where c.CustomerID == "ALFKI"
         select c)
        .First();
    
    // Change the contact name of the customer.
    existingCust.ContactName = "New Contact";
    

Eliminar una entidad

Con el mismo objeto de cliente, puede eliminar el primer pedido.

El código siguiente muestra cómo romper las relaciones entre las filas y cómo eliminar una fila de la base de datos. Agregue el código siguiente delante de Console.ReadLine para ver cómo se pueden eliminar los objetos:

Para eliminar una fila

  • Agregue el código siguiente justo encima de Console.ReadLine();:

    // Access the first element in the Orders collection.
    Order ord0 = existingCust.Orders[0];
    
    // Access the first element in the OrderDetails collection.
    OrderDetail detail0 = ord0.OrderDetails[0];
    
    // Display the order to be deleted.
    Console.WriteLine
        ("The Order Detail to be deleted is: OrderID = {0}, ProductID = {1}",
        detail0.OrderID, detail0.ProductID);
    
    // Mark the Order Detail row for deletion from the database.
    db.OrderDetails.DeleteOnSubmit(detail0);
    

Enviar los cambios a la base de datos

El último paso necesario para crear, actualizar y eliminar objetos es realmente enviar los cambios a la base de datos. Sin este paso, los cambios se habrán realizado localmente y no aparecerán en los resultados de la consulta.

Para enviar los cambios a la base de datos

  1. Inserte el código siguiente justo encima de Console.ReadLine:

    db.SubmitChanges();
    
  2. Inserte el código siguiente (después de SubmitChanges) para ver el antes y el después de enviar los cambios:

    Console.WriteLine("\nCustomers matching CA after update");
    foreach (var c in db.Customers.Where(cust =>
        cust.CustomerID.Contains("CA")))
    {
        Console.WriteLine("{0}, {1}, {2}",
            c.CustomerID, c.CompanyName, c.Orders.Count);
    }
    
  3. Presione F5 para depurar la solución.

  4. Presione Entrar en la ventana Consola para cerrar la aplicación.

Nota:

Después de haber agregado el nuevo cliente al enviar los cambios, no puede ejecutar de nuevo esta solución tal como está. Para ejecutar de nuevo la solución, cambie el nombre del cliente y el identificador de cliente que se debe agregar.

Vea también

Conceptos

Aprender mediante tutoriales (LINQ to SQL)