Compartir a través de


Cómo: Ejecutar un procedimiento almacenado en LightSwitch

las aplicaciones de LightSwitch pueden ejecutar procedimientos almacenados en una base de datos de SQL Server denominandolos de nivel de servidor.Puede crear comandos en el nivel de cliente de desencadenar la ejecución, y definir permisos para controlar quién tiene acceso a los procedimientos almacenados.

Muchas bases de datos existentes utilizan procedimientos almacenados porque tienen ventajas sobre otros tipos de interacción de base de datos como programación modular, ejecución más rápida, y el tráfico de red reducido.Estas mismas ventajas se aplican a ejecutar procedimientos almacenados de la aplicación de LightSwitch.

Los procedimientos siguientes se utiliza el procedimiento almacenado de uspUpdateEmployeePersonalInfo de la base de datos de ejemplo AdventureWorks:

CREATE PROCEDURE [HumanResources].[uspUpdateEmployeePersonalInfo]
@EmployeeID [int], 
@NationalIDNumber [nvarchar](15), 
@BirthDate [datetime], 
@MaritalStatus [nchar](1), 
@Gender [nchar](1)
WITH EXECUTE AS CALLER
AS
BEGIN
SET NOCOUNT ON;
UPDATE [HumanResources].[Employee] 
SET [NationalIDNumber] = @NationalIDNumber 
,[BirthDate] = @BirthDate 
,[MaritalStatus] = @MaritalStatus 
,[Gender] = @Gender 
WHERE [EmployeeID] = @EmployeeID;
END;

Para ejecutar un procedimiento almacenado distinto, debe cambiar los nombres y los parámetros para coincidir con él.

Para ejecutar un procedimiento almacenado

  1. Crear una tabla en la base de datos intrínseca que contiene los parámetros de entrada para el procedimiento almacenado.

    1. En Explorador de soluciones, abra el menú contextual para el nodo orígenes de datos y, a continuación agregar tabla.

    2. En la ventana propiedades, en el cuadro Nombre, entre en UpdateEmployeePersonalInfoUpdate.

      [!NOTA]

      Reemplazará normalmente UpdateEmployeePersonalInfoOperation con el nombre del procedimiento almacenado que desea ejecutar más un identificador como “operación” para indicar que esta tabla se utiliza para un procedimiento almacenado.

    3. Agregue los siguientes campos a la tabla:

      Nombre

      Tipo

      Obligatorio

      IdEmpleado

      Integer

      NationalIDNumber

      Cadena.

      Fecha de nacimiento

      Fecha Hora

      MaritalStatus

      Cadena.

      Sexo

      Cadena.

      [!NOTA]

      En los campos Nombre y tipo, reemplace los valores con los nombres y tipos de datos para cada parámetro de entrada del procedimiento almacenado, y asegúrese de que todos los campos están marcados como sea necesario.

  2. Agregue una referencia a la clase de ConfigurationManager.

    1. En Explorador de soluciones, elija el botón de la barra de herramientas mostrar todos los archivos.

    2. Abrir el menú contextual para el nodo servidor y, a continuación Agregar referencia.

    3. En el cuadro de diálogo Administrador de referencias, expanda el nodo ensamblados, elija el nodo .NET Framework, y seleccione la casilla System.Configuration.

  3. En la lista Escribir código, elija el método insert (en este caso, el método UpdateEmployeePersonalInfoOperations_Inserting ).

  4. Agregue el código similar al ejemplo siguiente:

    Imports System.Configuration
    Imports System.Data
    Imports System.Data.SqlClient
    
    Namespace LightSwitchApplication
        Public Class ApplicationDataService
            Private Sub UpdateEmployeePersonalInfoOperations_Inserting(entity As UpdateEmployeePersonalInfoOperation)
                Using connection = New SqlConnection
                    Dim connectionStringName = Me.DataWorkspace.AdventureWorksData.Details.Name
                    connection.ConnectionString =
                        ConfigurationManager.ConnectionStrings(connectionStringName).ConnectionString
    
                    Dim procedure = "HumanResources.uspUpdateEmployeePersonalInfo"
                    Using command = New SqlCommand(procedure, connection)
                        command.CommandType = CommandType.StoredProcedure
    
                        command.Parameters.Add(
                            New SqlParameter("@EmployeeID", entity.EmployeeID))
                        command.Parameters.Add(
                            New SqlParameter("@NationalIDNumber", entity.NationalIDNumber))
                        command.Parameters.Add(
                            New SqlParameter("@BirthDate", entity.BirthDate))
                        command.Parameters.Add(
                            New SqlParameter("@MaritalStatus", entity.MaritalStatus))
                        command.Parameters.Add(
                            New SqlParameter("@Gender", entity.Gender))
    
                        connection.Open()
                        command.ExecuteNonQuery()
                    End Using
                End Using
    
                Me.Details.DiscardChanges()
            End Sub
        End Class
    End Namespace
    
    using System.Configuration;
    using System.Data;
    using System.Data.SqlClient;
    
    public partial class ApplicationDataService
    {
        partial void UpdateEmployeePersonalInfoOperations_Inserting(UpdateEmployeePersonalInfoOperation entity)
        {
            using (SqlConnection connection = new SqlConnection())
            {
                string connectionStringName = this.DataWorkspace.AdventureWorksData.Details.Name;
                connection.ConnectionString =
                    ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
    
                string procedure = "HumanResources.uspUpdateEmployeePersonalInfo";
                using (SqlCommand command = new SqlCommand(procedure, connection))
                {
                    command.CommandType = CommandType.StoredProcedure;
    
                    command.Parameters.Add(
                        new SqlParameter("@EmployeeID", entity.EmployeeID));
                    command.Parameters.Add(
                        new SqlParameter("@NationalIDNumber", entity.NationalIDNumber));
                    command.Parameters.Add(
                        new SqlParameter("@BirthDate", entity.BirthDate));
                    command.Parameters.Add(
                        new SqlParameter("@MaritalStatus", entity.MaritalStatus));
                    command.Parameters.Add(
                        new SqlParameter("@Gender", entity.Gender));
    
                    connection.Open();
                    command.ExecuteNonQuery();
                }
            }
    
            this.Details.DiscardChanges();
        }
    }
    

    Este código crea un objeto de SqlConnection y obtiene la cadena de conexión del archivo web.config.El código creará un objeto SqlCommand con el texto necesario de comando, agrega los valores de parámetro, y ejecuta el comando.Finalmente DiscardChanges se denomina; no necesita guardar los cambios en la tabla UpdateEmployeePersonalInfoOperation.

    [!NOTA]

    Debe reemplazar el nombre DataWorkspace y los nombres de parámetro y valores con los dispone de procedimiento almacenado.

Para invocar el procedimiento almacenado de una pantalla

  1. En Diseñador de pantallas, abra el menú contextual para el nodo Barra de comandos de pantalla y, a continuación Botón Agregar.

  2. En el cuadro de diálogo Botón Agregar, elija el botón de opción Nuevo método.

  3. En el cuadro de texto Nombre, entre en UpdateEmployeeInfo.

    [!NOTA]

    Puede sustituir un nombre que describa qué hace el procedimiento almacenado.

  4. En Diseñador de pantallas, abra el menú contextual para el nodo del botón y, a continuación Editar código de ejecución.

  5. Agregue el código similar al ejemplo siguiente:

    Private Sub UpdateEmployeeInfo_Execute()
        Dim dataWorkspace = New DataWorkspace
        Dim employee = Me.Employees.SelectedItem
    
        Dim operation =
            dataWorkspace.ApplicationData.UpdateEmployeePersonalInfoOperations.AddNew()
        operation.EmployeeID = employee.EmployeeID
        operation.NationalIDNumber = employee.NationalIDNumber
        operation.BirthDate = employee.BirthDate
        operation.MaritalStatus = employee.MaritalStatus
        operation.Gender = employee.Gender
    
        dataWorkspace.ApplicationData.SaveChanges()
    End Sub
    
    partial void UpdateEmployeeInfo_Execute()
    {
        DataWorkspace dataWorkspace = new DataWorkspace();
        Employee employee = this.Employees.SelectedItem;
    
        UpdatePersonalInfoOperation operation = 
            dataWorkspace.ApplicationData.UpdateEmployeePersonalInfoOperations.AddNew();
        operation.EmployeeID = employee.EmployeeID;
        operation.NationalIDNumber = employee.NationalIDNumber;
        operation.BirthDate = employee.BirthDate;
        operation.MaritalStatus = employee.MaritalStatus;
        operation.Gender = employee.Gender;
    
        dataWorkspace.ApplicationData.SaveChanges();
    }
    

    Este código crea primero DataWorkspace y después crea UpdateEmployeePersonalInfoOperation mediante ApplicationData de DataWorkspace recién creado.Los valores de la operación están asignados, y la operación invoca llamando a SaveChanges.Este paso desencadena el método de UpdateEmployeePersonalInfoOperations_Inserting de nivel intermedio que ejecuta el procedimiento almacenado en la base de datos.

    SugerenciaSugerencia

    Los datos de presentación no se actualiza para reflejar los cambios cuando se llama al procedimiento almacenado.Para actualizar la pantalla, puede llamar a Employees.Refresh() o DataWorkspace.AdventureWorksData.Employees_Single(operation.EmployeeID) al final del método de Execute del botón.Observe que Employees.Refresh() actualiza todos los registros, y Employees_Single actualiza sólo el elemento especificado.

Para definir los permisos para un procedimiento almacenado

  1. En Explorador de soluciones, abra el menú contextual para el nodo propiedades y, a continuación Abrir.

  2. En la pestaña Access Control, elija el tipo de autenticación que se utilizará si aún no está especificado.

  3. Elija <Add New Permission> el vínculo y, a continuación y entre en UpdatePersonalInfo.

    [!NOTA]

    Puede sustituir un nombre que describa qué hace el procedimiento almacenado.

  4. En Explorador de soluciones, abra el menú contextual de la tabla de procedimiento almacenado y, a continuación Abrir.

  5. En la lista Escribir código, elija el método CanInsert.

  6. Agregue el código similar al ejemplo siguiente:

    Private Sub UpdateEmployeePersonalInfoOperations_CanInsert(ByRef result As Boolean)
        result = Me.Application.User.HasPermission(Permissions.UpdatePersonalInfo)
    End Sub
    
    partial void UpdateEmployeePersonalInfoOperations_CanInsert(ref bool result)
    {
        result = this.Application.User.HasPermission(Permissions.UpdatePersonalInfo);
    }
    

Vea también

Tareas

Tutorial: Actualizar registros mediante procedimientos almacenados

Autenticación y autorización de LightSwitch

Conceptos

Trabajar con objetos relacionados con datos en el código