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
Creare una tabella nel database intrinseco che include i parametri di input per la stored procedure.
In Esplora soluzioni aprire il menu di scelta rapida per il nodo Origini dati, quindi scegliere Aggiungi tabella.
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.
Aggiungere i campi seguenti alla tabella:
Nome
Tipo
Obbligatorio
EmployeeID
Integer
Sì
NationalIDNumber
String
Sì
BirthDate
Data/Ora
Sì
MaritalStatus
String
Sì
Sesso
String
Sì
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.
Aggiungere un riferimento alla classe ConfigurationManager.
In Esplora soluzioni aprire il menu di scelta rapida per il nodo Server, quindi scegliere Aggiungi riferimento.
Nella finestra di dialogo Gestione riferimenti espandere il nodo Assembly, scegliere il nodo Framework e quindi selezionare la casella di controllo System.Configuration.
Nell'elenco Scrivi codice scegliere il metodo Inserting, in questo caso il metodo UpdateEmployeePersonalInfoOperations_Inserting.
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
In Progettazione schermata aprire il menu di scelta rapida per il nodo Barra dei comandi schermata, quindi scegliere Aggiungi pulsante.
Nella finestra di dialogo Aggiungi pulsante scegliere il pulsante di opzione Nuovo metodo.
Nella casella di testo Nome immettere UpdateEmployeeInfo.
Nota
È possibile specificare un nome sostitutivo che descrive l'operazione eseguita dalla stored procedure.
In Progettazione schermata aprire il menu di scelta rapida per il nodo relativo al pulsante, quindi scegliere Modifica codice Execute.
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
In Esplora soluzioni aprire il menu di scelta rapida per il nodo Proprietà, quindi scegliere Apri.
Nella scheda Controllo di accesso scegliere il tipo di autenticazione da usare, se non è già specificato.
Scegliere il collegamento <Aggiungi nuova autorizzazione>, quindi immettere UpdatePersonalInfo.
Nota
È possibile specificare un nome sostitutivo che descrive l'operazione eseguita dalla stored procedure.
In Esplora soluzioni aprire il menu di scelta rapida per la tabella di stored procedure, quindi scegliere Apri.
Nell'elenco Scrivi codice scegliere il metodo CanInsert.
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