Condividi tramite


Procedura: eseguire una stored procedure in LightSwitch

Le applicazioni LightSwitch possono eseguire stored procedure in un database SQL Server chiamandole dal livello server. È possibile creare comandi nel livello client per attivare l'esecuzione ed è possibile definire autorizzazioni per stabilire chi può accedere alle stored procedure.

Molti database esistenti usano stored procedure poiché offrono molti vantaggi rispetto ad altri tipi di interazione con il database, ad esempio la programmazione modulare, una maggiore velocità di esecuzione e una minore traffico di rete. Gli stessi vantaggi sono applicabili all'esecuzione di stored procedure dall'applicazione LightSwitch.

Le procedure seguenti usano la stored procedure uspUpdateEmployeePersonalInfo del 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 cambiare i nomi e i parametri in modo che corrispondano alla stored procedure specifica.

Per eseguire una stored procedure

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

    1. In Esplora soluzioni aprire il menu di scelta rapida per il nodo Origini dati, quindi scegliere Aggiungi tabella.

    2. Nella casella di testo Nome della finestra Proprietà immettere UpdateEmployeePersonalInfoOperation.

      Nota

      In genere si sostituisce UpdateEmployeePersonalInfoOperation con il nome della stored procedure che si vuole eseguire, oltre a un identificatore quale "Operation" per indicare che questa tabella viene usata per una stored procedure.

    3. Aggiungere i campi seguenti alla tabella:

      Nome

      Tipo

      Obbligatorio

      EmployeeID

      Integer

      NationalIDNumber

      String

      BirthDate

      Data/Ora

      MaritalStatus

      String

      Sesso

      String

      Nota

      Nei campi Nome e Tipo sostituire i valori con i nomi e i tipi di dati per ogni parametro di input della stored procedure e assicurarsi che tutti i campi siano contrassegnati come obbligatori.

  2. Aggiungere un riferimento alla classe ConfigurationManager.

    1. In Esplora soluzioni aprire il menu di scelta rapida per il nodo Server, quindi scegliere Aggiungi riferimento.

    2. Nella finestra di dialogo Gestione riferimenti espandere il nodo Assembly, scegliere il nodo Framework e quindi selezionare la casella di controllo System.Configuration.

  3. Nell'elenco Scrivi codice scegliere il metodo Inserting, in questo caso il metodo UpdateEmployeePersonalInfoOperations_Inserting.

  4. Aggiungere codice analogo all'esempio 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
            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();
                }
            }
        }
    }
    

    Questo codice crea un oggetto SqlConnection e ottiene la stringa di connessione dal file web.config. Il codice crea quindi un oggetto SqlCommand con il testo di comando necessario, aggiunge i valori dei parametri ed esegue il comando. Viene infine chiamato DiscardChanges. Non è necessario salvare le modifiche nella tabella UpdateEmployeePersonalInfoOperation.

    Nota

    È necessario sostituire il nome DataWorkspace e i nomi e i valori dei parametri con quelli relativi alla stored procedure specifica.

Per chiamare la stored procedure da una schermata

  1. In Progettazione schermata aprire il menu di scelta rapida per il 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 specificare un nome sostitutivo che descrive l'operazione eseguita dalla stored procedure.

  4. In Progettazione schermata aprire il menu di scelta rapida per il nodo relativo al pulsante, quindi scegliere Modifica codice Execute.

  5. Aggiungere codice analogo all'esempio 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 prima di tutto un oggetto DataWorkspace, quindi crea UpdateEmployeePersonalInfoOperation usando ApplicationData appena creato di DataWorkspace. I valori per l'operazione vengono assegnati e l'operazione viene richiamata chiamando SaveChanges. Questo passaggio attiva il metodo UpdateEmployeePersonalInfoOperations_Inserting del livello intermedio, che esegue la stored procedure nel database.

    Suggerimento

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

Per definire le autorizzazioni per una stored procedure

  1. In Esplora soluzioni aprire il menu di scelta rapida per il nodo Proprietà, quindi scegliere Apri.

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

  3. Scegliere il collegamento <Aggiungi nuova autorizzazione>, quindi immettere UpdatePersonalInfo.

    Nota

    È possibile specificare un nome sostitutivo che descrive l'operazione eseguita dalla stored procedure.

  4. In Esplora soluzioni aprire il menu di scelta rapida per la tabella di stored procedure, quindi scegliere Apri.

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

  6. Aggiungere codice analogo all'esempio 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: Uso di stored procedure

Procedura: abilitare l'autenticazione in un'app client Silverlight

Concetti

Utilizzo degli oggetti correlati ai dati nel codice