Compartir a través de


Tutorial: Usar sólo procedimientos almacenados (C#) (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 ejecutando 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 C#. 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 C#.

Requisitos previos

En este tutorial se requiere lo siguiente:

  • Este tutorial utiliza una carpeta dedicada ("c:\linqtest7") 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:\linqtest7.

  • Un archivo de código de C# 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:\linqtest7\northwind.cs" /language:csharp "c:\linqtest7\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, 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 Windows Forms.

  4. En el cuadro Nombre, escriba SprocOnlyApp.

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

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

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 la ubicación del archivo c:\linqtest7\northwind.cs y, a continuación, haga clic en Agregar.

    El archivo northwind.cs 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:\linqtest7\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.cs y, a continuación, en Ver código.

  2. Escriba el código siguiente en la clase Form1:

    Northwnd db = new Northwnd(@"c:\linqtest7\northwnd.mdf");
    

Configurar la interfaz de usuario

En esta tarea preparará una interfaz para que los usuarios puedan ejecutar procedimientos almacenados para tener acceso a los datos de la base de datos. En las aplicaciones 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.cs[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 Order Details en Form1 para abrir el controlador de eventos button1 en 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.
    string param = textBox1.Text;
    
    // Declare a variable to hold the results
    // returned by the stored procedure.
    var custquery = db.CustOrdersDetail(Convert.ToInt32(param));
    
    // Execute the stored procedure and display the results.
    string msg = "";
    foreach (CustOrdersDetailResult custOrdersDetail in custquery)
    {
        msg = msg + custOrdersDetail.ProductName + "\n";
    }
    if (msg == "")
        msg = "No results.";
    MessageBox.Show(msg);
    
    // Clear the variables before continuing.
    param = "";
    textBox1.Text = "";
    
  3. Ahora, haga doble clic en button2 en Form1 para abrir el controlador button2.

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

    // Comments in the code for button2 are the same
    // as for button1.
    string param = textBox2.Text;
    
    var custquery = db.CustOrderHist(param);
    
    string msg = "";
    foreach (CustOrderHistResult custOrdHist in custquery)
    {
        msg = msg + custOrdHist.ProductName + "\n";
    }
    MessageBox.Show(msg);
    
    param = "";
    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)