Tutorial: Manipular datos (Visual Basic) (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 Basic.
Requisitos previos
En este tutorial se requiere lo siguiente:
Este tutorial utiliza una carpeta dedicada ("c:\linqtest2") 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:\linqtest2.
Archivo de código de Visual Basic 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:\linqtest2\northwind.vb" /language:vb "C:\linqtest2\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
En el menú Archivo de Visual Studio, haga clic en Nuevo proyecto.
En el panel Tipos de proyecto del cuadro de diálogo Nuevo proyecto, haga clic en Visual Basic.
En el panel Plantillas, haga clic en Aplicación de consola.
En el cuadro Nombre, escriba LinqDataManipulationApp.
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 su proyecto (haga clic en Mostrar todos los archivos en el Explorador de soluciones y expanda el nodo Referencias), agréguelo, como se explica en los pasos siguientes.
Para agregar System.Data.Linq
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.
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.
En el editor de código, agregue las directivas siguientes encima de Module1:
Imports System.Data.Linq Imports 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
En el menú Proyecto, haga clic en Agregar elemento existente.
En el cuadro de diálogo Agregar elemento existente, vaya a c:\linqtest2\northwind.vb y, a continuación, haga clic en Agregar.
El archivo northwind.vb 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 el nombre de la base de datos, Northwnd, no tiene la i. Si se generan errores en los pasos siguientes, revise el archivo northwind.vb 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
Escriba o pegue el código siguiente en la clase Sub Main:
' Use a connection string, but connect to ' the temporary copy of the database. Dim db As New Northwnd _ ("C:\linqtest2\northwnd.mdf") ' Keep the console window open after activity stops. Console.ReadLine()
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
Cree un nuevo Customer agregando el código siguiente delante de Console.ReadLine en Sub Main:
' Create the new Customer object. Dim newCust As New Customer() newCust.CompanyName = "AdventureWorks Cafe" newCust.CustomerID = "A3VCA" ' Add the customer to the Customers table. db.Customers.InsertOnSubmit(newCust) Console.WriteLine("Customers matching CA before insert:") Dim custQuery = _ From cust In db.Customers _ Where cust.CustomerID.Contains("CA") _ Select cust For Each cust In custQuery Console.WriteLine("Customer ID: " & cust.CustomerID) Next
Presione F5 para depurar la solución.
Los resultados que se muestran en la ventana de la consola son los siguientes:
Customers matching CA before insert:
Customer ID: CACTU
Customer ID: RICAR
Observe que la nueva fila no aparece en los resultados. Los nuevos datos no se han enviado todavía a la base de datos.
Presione Entrar en la ventana Consola para detener la depuración.
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():
Dim existingCust = _ (From cust In db.Customers _ Where cust.CustomerID = "ALFKI" _ Select cust).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.
Para eliminar una fila
Agregue el código siguiente justo encima de Console.ReadLine():
' Access the first element in the Orders collection. Dim ord0 As Order = existingCust.Orders(0) ' Access the first element in the OrderDetails collection. Dim detail0 As OrderDetail = ord0.OrderDetails(0) ' Display the order to be deleted. Console.WriteLine _ (vbCrLf & "The Order Detail to be deleted is: OrderID = " _ & detail0.OrderID) ' 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
Inserte el código siguiente justo encima de Console.ReadLine:
db.SubmitChanges()
Inserte el código siguiente (después de SubmitChanges) para ver el antes y el después de enviar los cambios:
Console.WriteLine(vbCrLf & "Customers matching CA after update:") Dim finalQuery = _ From cust In db.Customers _ Where cust.CustomerID.Contains("CA") _ Select cust For Each cust In finalQuery Console.WriteLine("Customer ID: " & cust.CustomerID) Next
Presione F5 para depurar la solución.
En la ventana de la consola aparece lo siguiente.
Customers matching CA before update: Customer ID: CACTU Customer ID: RICAR The Order Detail to be deleted is: OrderID = 10643 Customers matching CA after update: Customer ID: A3VCA Customer ID: CACTU Customer ID: RICAR
Presione Entrar en la ventana Consola para detener la depuració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á, porque no puede agregar el mismo cliente de nuevo tal como está. Para ejecutar de nuevo la solución, cambie el valor del identificador de cliente que se debe agregar. |