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
Creare una tabella nel database intrinseco che contiene i parametri di input per la stored procedure.
In Esplora soluzioni, scegliere dal menu di scelta rapida del nodo Origini dati e quindi scegliere Aggiungi tabella.
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.
Aggiungere i seguenti campi alla tabella:
Nome
Type
Obbligatorio
EmployeeID
Integer
Sì
NationalIDNumber
String
Sì
Data di nascita
Data/Ora
Sì
MaritalStatus
String
Sì
Sesso
String
Sì
[!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.
Aggiungere un riferimento alla classe di ConfigurationManager.
In Esplora soluzioni, scegliere il pulsante della barra degli strumenti Mostra tutti i file.
Aprire il menu di scelta rapida del nodo Server quindi scegliere Aggiungi riferimento.
Nella finestra di dialogo Gestione riferimenti, espandere il nodo Assembly, selezionare il nodo framework quindi selezionare la casella di controllo System.Configuration.
Nell'elenco Scrivi codice, scegliere il metodo Inserimento in corso corrente ( questo caso, il metodo UpdateEmployeePersonalInfoOperations_Inserting ).
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
In Progettazione schermata, aprire il menu di scelta rapida del 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 sostituire un nome che descrive ciò che la stored procedure è.
In Progettazione schermata, aprire il menu di scelta rapida del nodo del pulsante e quindi scegliere Modifica codice Execute.
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.
Suggerimento 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
In Esplora soluzioni, scegliere dal menu di scelta rapida del nodo Proprietà quindi scegliere Apri.
Nella scheda Controllo accesso, scegliere il tipo di autenticazione da utilizzare se non è già specificato.
Scegliere <Add New Permission> il collegamento e quindi immettere UpdatePersonalInfo.
[!NOTA]
È possibile sostituire un nome che descrive ciò che la stored procedure è.
In Esplora soluzioni, scegliere dal menu di scelta rapida per la tabella delle stored procedure e quindi scegliere Apri.
Nell'elenco Scrivi codice, scegliere il metodo CanInsert.
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