Condividi tramite


Procedura: eseguire una stored procedure in LightSwitch

le applicazioni diLightSwitch possono eseguire stored procedure in un database SQL Server chiamandoli dal livello di server.È possibile creare i controlli nel livello client attivare l'esecuzione e definire autorizzazioni per controllare chi ha accesso alle stored procedure.

Molti database esistenti seguono le stored procedure in quanto presentano vantaggi rispetto ad altri tipi di interazione del database come programmazione modulare, un'esecuzione più veloce e traffico di rete ridotto.Questi stessi vantaggi si applicano a eseguire stored procedure dall'applicazione di LightSwitch.

Le procedure riportate di seguito seguono la stored procedure di uspUpdateEmployeePersonalInfo dal database di esempio 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;

Per eseguire una stored procedure diversa, è necessario modificare i nomi e i parametri per corrisponderlo.

Per eseguire una stored procedure

  1. Creare una tabella nel database intrinseco che contiene i parametri di input per la stored procedure.

    1. In Esplora soluzioni, scegliere dal menu di scelta rapida del nodo Origini dati e quindi scegliere Aggiungi tabella.

    2. Nella finestra Proprietà, nella casella Nome, immettere UpdateEmployeePersonalInfoUpdate.

      [!NOTA]

      In genere UpdateEmployeePersonalInfoOperation sostituito con il nome della stored procedure che si desidera eseguire più un identificatore come "operazione" per indicare che la tabella sia utilizzata per una stored procedure.

    3. Aggiungere i seguenti campi alla tabella:

      Nome

      Type

      Obbligatorio

      EmployeeID

      Integer

      NationalIDNumber

      String

      Data di nascita

      Data/Ora

      MaritalStatus

      String

      Sesso

      String

      [!NOTA]

      Nei campi Tipo e Nome, sostituire i valori i nomi e i tipi di dati per ogni parametro di input nella stored procedure e accertarsi che tutti i campi sono contrassegnati come richiesto.

  2. Aggiungere un riferimento alla classe di ConfigurationManager.

    1. In Esplora soluzioni, scegliere il pulsante della barra degli strumenti Mostra tutti i file.

    2. Aprire il menu di scelta rapida del nodo Server quindi scegliere Aggiungi riferimento.

    3. Nella finestra di dialogo Gestione riferimenti, espandere il nodo Assembly, selezionare il nodo framework quindi selezionare la casella di controllo System.Configuration.

  3. Nell'elenco Scrivi codice, scegliere il metodo Inserimento in corso corrente ( questo caso, il metodo UpdateEmployeePersonalInfoOperations_Inserting ).

  4. Aggiungere codice simile al seguente:

    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();
        }
    }
    

    Questo codice crea un oggetto di SqlConnection e ottiene la stringa di connessione dal file web.config.Il codice crea quindi un oggetto SqlCommand con il testo del comando necessario, aggiungere i valori dei parametri ed eseguito il comando.Infine DiscardChanges viene chiamato; non è necessario salvare le modifiche nella tabella UpdateEmployeePersonalInfoOperation.

    [!NOTA]

    È necessario sostituire il nome DataWorkspace i nomi e i valori con quelli per il proprio stored procedure.

Per chiamare la stored procedure da uno schermo

  1. In Progettazione schermata, aprire il menu di scelta rapida del nodo Barra dei comandi schermata quindi scegliere Aggiungi pulsante.

  2. Nella finestra di dialogo Aggiungi pulsante, scegliere il pulsante di opzione Nuovo metodo.

  3. Nella casella di testo Nome, immettere UpdateEmployeeInfo.

    [!NOTA]

    È possibile sostituire un nome che descrive ciò che la stored procedure è.

  4. In Progettazione schermata, aprire il menu di scelta rapida del nodo del pulsante e quindi scegliere Modifica codice Execute.

  5. Aggiungere codice simile al seguente:

    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();
    }
    

    Questo codice crea innanzitutto DataWorkspace quindi crea UpdateEmployeePersonalInfoOperation utilizzando ApplicationDatadi DataWorkspace appena creato.I valori per l'operazione vengono assegnati e l'operazione viene eseguita chiamando SaveChanges.Questo passaggio attiva il metodo di UpdateEmployeePersonalInfoOperations_Inserting di livello intermedio che esegue la stored procedure nel database.

    SuggerimentoSuggerimento

    I dati dello schermo non vengono aggiornati per riflettere le modifiche quando si chiama la stored procedure.Per aggiornare lo schermo, è possibile chiamare Employees.Refresh() o DataWorkspace.AdventureWorksData.Employees_Single(operation.EmployeeID) alla fine del metodo di Execute del pulsante.Si noti che Employees.Refresh() aggiorna tutti i record e Employees_Single aggiorna solo l'elemento specificato.

Per definire autorizzazioni per una stored procedure

  1. In Esplora soluzioni, scegliere dal menu di scelta rapida del nodo Proprietà quindi scegliere Apri.

  2. Nella scheda Controllo accesso, scegliere il tipo di autenticazione da utilizzare se non è già specificato.

  3. Scegliere <Add New Permission> il collegamento e quindi immettere UpdatePersonalInfo.

    [!NOTA]

    È possibile sostituire un nome che descrive ciò che la stored procedure è.

  4. In Esplora soluzioni, scegliere dal menu di scelta rapida per la tabella delle stored procedure e quindi scegliere Apri.

  5. Nell'elenco Scrivi codice, scegliere il metodo CanInsert.

  6. Aggiungere codice simile al seguente:

    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);
    }
    

Vedere anche

Attività

Procedura dettagliata: aggiornamento di record mediante stored procedure

Autenticazione e autorizzazione di LightSwitch

Concetti

Utilizzo degli oggetti correlati ai dati nel codice