Tutorial: Usar sólo procedimientos almacenados (Visual Basic) (LINQ to SQL)

Actualización: November 2007

Este tutorial proporciona un escenario completo básico de LINQ to SQL para tener acceso a los datos utilizando procedimientos almacenados solamente. Este enfoque suelen utilizarlo los administradores de bases de datos para limitar el acceso al almacén de datos.

Nota:

También puede utilizar procedimientos almacenados en aplicaciones LINQ to SQL para invalidar el comportamiento predeterminado, especialmente para los procesos Create, Update y Delete. Para obtener más información, vea Personalizar operaciones de inserción, actualización y eliminación (LINQ to SQL).

En este tutorial, utilizará dos métodos asignados a procedimientos almacenados en la base de datos de ejemplo Northwind: CustOrdersDetail y CustOrderHist. La asignación se produce al ejecutar la herramienta de línea de comandos SqlMetal para generar un archivo de Visual Basic. Para obtener más información, vea la sección Requisitos previos que se incluye posteriormente en este tutorial.

En este tutorial no se utiliza el Diseñador relacional de objetos. Los desarrolladores de Visual Studio también pueden utilizar el Diseñador relacional de objetos para implementar funcionalidad de procedimiento almacenado.

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:\linqtest3") 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:\linqtest3.

  • Un archivo de código de Visual Basic generado a partir de la base de datos Northwind.

    Este tutorial se escribió utilizando la herramienta SqlMetal con la línea de comandos siguiente:

    sqlmetal /code:"c:\linqtest3\northwind.vb" /language:vb "c:\linqtest3\northwnd.mdf" /sprocs /functions /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:

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

  • Agregar el ensamblado System.Data.Linq al proyecto.

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

  • Crear una conexión con la base de datos.

  • Configurar la interfaz de usuario.

  • Ejecutar y probar la aplicación.

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, haga clic en Nuevo proyecto.

  2. En el panel Tipos de proyecto del cuadro de diálogo Nuevo proyecto, expanda Visual Basic y, a continuación, haga clic en Windows.

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

  4. En el cuadro Nombre, escriba SprocOnlyApp.

  5. Haga clic en Aceptar.

    Se abre el Diseñador de Windows Forms.

Agregar la referencia al ensamblado de LINQ to SQL

El ensamblado de LINQ to SQL no está incluido en la plantilla Aplicación de Windows Forms estándar. Tendrá que agregar el ensamblado como se explica en los pasos siguientes:

Para agregar System.Data.Linq.dll

  1. En el Explorador de soluciones, haga clic en Mostrar todos los archivos.

  2. 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.

  3. 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.

Agregar el archivo de código de Northwind al proyecto

En este paso 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:\linqtest3\northwind.vb y, a continuación, haga clic en Agregar.

    El archivo northwind.vb se agrega al proyecto.

Crear una conexión de base de datos

En este paso, definirá la conexión con la base de datos de ejemplo Northwind. En este tutorial se utiliza "c:\linqtest3\northwnd.mdf" como ruta de acceso.

Para crear la conexión a la base de datos

  1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en Form1.vb y, a continuación, haga clic en Ver código.

    Class Form1 aparece en el editor de código.

  2. Escriba el código siguiente en el bloque de código Form1:

    Dim db As New Northwnd("c:\linqtest3\northwnd.mdf")
    

Configurar la interfaz de usuario

En esta tarea creará una interfaz para que los usuarios puedan ejecutar procedimientos almacenados para tener acceso a los datos de la base de datos. En la aplicación que desarrolla con este tutorial, los usuarios pueden tener acceso a los datos de la base de datos únicamente mediante los procedimientos almacenados que están incrustados en la aplicación.

Para configurar la interfaz de usuario

  1. Regrese al Diseñador de Windows Forms (Form1.vb[Design]).

  2. En el menú Ver, haga clic en Cuadro de herramientas.

    Se abrirá el cuadro de herramientas.

    Nota:

    Haga clic en el icono para ocultar automáticamente de forma que el cuadro de herramientas se mantenga abierto mientras realiza los demás pasos de esta sección.

  3. Arrastre dos botones, dos cuadros de texto y dos etiquetas desde el cuadro de herramientas hasta Form1.

    Organice los controles como en la ilustración anexa. Expanda Form1 para que los controles tengan el espacio necesario.

  4. Haga clic con el botón secundario del mouse en Label1 y, a continuación, haga clic en Propiedades.

  5. Cambie la propiedad de texto de Label1 a Enter OrderID:.

  6. De la misma manera, para Label2, cambie la propiedad de texto de Label2 a Enter CustomerID:.

  7. De la misma manera, cambie la propiedad de texto de Button1 a Order Details.

  8. Cambie la propiedad de texto para Button2 a Order History.

    Amplíe los controles de botón para que todo el texto esté visible.

Para administrar los clics de botón

  1. Haga doble clic en Detalles de pedido en Form1 crear el controlador de eventos Button1 y abrir el editor de código.

  2. Escriba el código siguiente en el controlador Button1:

    ' Declare a variable to hold the contents of
    ' TextBox1 as an argument for the stored
    ' procedure.
    Dim parm As String = TextBox1.Text
    
    ' Declare a variable to hold the results returned
    ' by the stored procedure.
    Dim custQuery = db.CustOrdersDetail(parm)
    
    ' Clear the message box of previous results.
    Dim msg As String = ""
    Dim response As MsgBoxResult
    
    ' Execute the stored procedure and store the results.
    For Each custOrdersDetail As CustOrdersDetailResult In custQuery
        msg &= custOrdersDetail.ProductName & vbCrLf
    Next
    
    ' Display the results.
    If msg = "" Then
        msg = "No results."
    End If
    response = MsgBox(msg)
    
    ' Clear the variables before continuing.
    parm = ""
    TextBox1.Text = ""
    
  3. Ahora haga doble clic en Button2 en Form1 para crear el controlador de eventos Button2 y abrir el editor de código.

  4. Escriba el código siguiente en el controlador Button2:

    ' Comments in the code for Button2 are the same
    ' as for Button1.
    Dim parm As String = TextBox2.Text
    
    Dim custQuery2 = db.CustOrderHist(parm)
    Dim msg As String = ""
    Dim response As MsgBoxResult
    
    For Each custOrdHist As CustOrderHistResult In custQuery2
        msg &= custOrdHist.ProductName & vbCrLf
    Next
    
    If msg = "" Then
        msg = "No results."
    End If
    
    response = MsgBox(msg)
    parm = ""
    TextBox2.Text = ""
    

Probar la aplicación

Ha llegado el momento de probar la aplicación. Observe que su contacto con el almacén de datos se limita a las acciones que puedan realizar los dos procedimientos almacenados. Esas acciones son: devolver los productos incluidos para cualquier orderID que escriba o devolver un historial de los productos solicitados para cualquier CustomerID que escriba.

Para probar la aplicación

  1. Presione F5 para iniciar la depuración.

    Aparece Form1.

  2. En el cuadro Enter OrderID, escriba 10249 y, a continuación, haga clic en Order Details.

    Un cuadro de mensaje muestra los productos incluidos en el pedido 10249.

    Haga clic en Aceptar para cerrar el cuadro de mensaje.

  3. En el cuadro Enter CustomerID, escriba ALFKI y, a continuación, haga clic en Order History.

    Aparece un cuadro de mensaje con el historial de pedidos del cliente ALFKI.

    Haga clic en Aceptar para cerrar el cuadro de mensaje.

  4. En el cuadro Enter OrderID, escriba 123 y, a continuación, haga clic en Order Details.

    Aparece un cuadro de mensaje con el texto "No results".

    Haga clic en Aceptar para cerrar el cuadro de mensaje.

  5. En el menú Depurar, haga clic en Detener depuración.

    La sesión de depuración se cierra.

  6. Cuando termine de experimentar, haga clic en Cerrar proyecto en el menú Archivo y guarde su proyecto cuando se le solicite.

Pasos siguientes

Puede mejorar este proyecto realizando algunos cambios. Por ejemplo, podría enumerar los procedimientos almacenados disponibles en un cuadro de lista y permitir que el usuario seleccione qué procedimientos debe ejecutar. También podría transmitir el resultado de los informes a un archivo de texto.

Vea también

Conceptos

Aprender mediante tutoriales (LINQ to SQL)

Otros recursos

Procedimientos almacenados (LINQ to SQL)