Procedura dettagliata: Uso di stored procedure
Non è possibile chiamare una stored procedure in un database SQL Server direttamente da LightSwitch, ma è possibile creare una tabella locale nell'app LightSwitch che contiene i parametri per la stored procedure e chiamare quindi la stored procedure da un evento a livello del server. Questa procedura dettagliata illustra come inserire record dei clienti in un database SQL tramite stored procedure.
Molti amministratori di database non consentono l'accesso diretto alle tabelle, ma espongono visualizzazioni di sola lettura e forniscono stored procedure per inserire, aggiornare ed eliminare record. LightSwitch non riconosce le stored procedure, quindi qualsiasi database che fa affidamento su di esse per aggiornare i record potrebbe sembrare inizialmente inutilizzabile. Con qualche operazione aggiuntiva è possibile usare questi database da LightSwitch.
Prerequisiti
Questa procedura dettagliata usa il database di esempio Northwind.
Creare una stored procedure
Nella maggior parte dei casi è possibile accedere a stored procedure già esistenti in un database. Il database Northwind non ha la stored procedure necessaria per inserire i record cliente, quindi è necessario aggiungerla.
Per aggiungere una stored procedure
Nella barra dei menu scegliere Visualizza, Esplora oggetti di SQL Server.
Nella finestra Esplora oggetti di SQL Server espandere il nodo di database NORTHWIND, quindi scegliere Programmabilità.
Espandere il nodo Programmabilità, quindi scegliere Stored procedure.
Aprire il menu di scelta rapida per Stored procedure, quindi scegliere Aggiungi nuova stored procedure.
In Editor del codice, sostituire il contenuto con il codice Transact-SQL seguente, quindi scegliere il pulsante Aggiorna.
CREATE Procedure [dbo].[InsertCustomer] @CustomerID nchar(5), @CompanyName nvarchar(40), @ContactName nvarchar(30), @ContactTitle nvarchar(30), @Address nvarchar(60), @City nvarchar(15), @Region nvarchar(15), @PostalCode nvarchar(10), @Country nvarchar(15), @Phone nvarchar(24), @Fax nvarchar(24) AS INSERT INTO [dbo].[Customers] ([CustomerID] ,[CompanyName] ,[ContactName] ,[ContactTitle] ,[Address] ,[City] ,[Region] ,[PostalCode] ,[Country] ,[Phone] ,[Fax]) VALUES (@CustomerID ,@CompanyName ,@ContactName ,@ContactTitle ,@Address ,@City ,@Region ,@PostalCode ,@Country ,@Phone ,@Fax)
Nella finestra di dialogo Anteprima aggiornamenti database scegliere il pulsante Aggiorna database.
La stored procedure InsertCustomer viene aggiunta al database.
Creare un'applicazione LightSwitch
In questo passaggio verrà creata un'app per chiamare la stored procedure e aggiungere nuovi clienti al database Northwind.
Per creare l'app
Nella barra dei menu scegliere File, Nuovo, Progetto.
Nella finestra di dialogo Nuovo progetto espandere il nodo Visual Basic o Visual C#, quindi fare clic sul modello Applicazione HTML LightSwitch.
Nella casella di testo Nome immettere NorthwindSP, quindi fare clic su OK.
Per aggiungere un'origine dati
In Esplora soluzioni aprire il menu di scelta rapida per il nodo Origini dati e scegliere Aggiungi origine dati.
In Associazione guidata origine dati scegliere Database, quindi fare clic su Avanti.
Nella finestra di dialogo Proprietà connessione immettere le informazioni di connessione per il database Northwind, quindi fare clic su OK.
Nella pagina Seleziona oggetti di database espandere il nodo Tabelle, selezionare la casella di controllo Clienti, quindi scegliere Fine.
Per aggiungere una tabella locale
In Esplora soluzioni aprire il menu di scelta rapida per il nodo Origini dati e scegliere Aggiungi tabella.
Nella finestra Proprietà scegliere la proprietà Nome e immettere NewCustomer.
In Entity Designer aggiungere i seguenti campi:
Nome
Tipo
Obbligatorio
CustomerID
String
Sì
CompanyName
String
Sì
ContactName
String
Sì
ContactTitle
String
Sì
Address
String
Sì
City
String
Sì
Region
String
Sì
PostalCode
String
Sì
Paese
String
Sì
Telefono
Numero di telefono
Sì
Fax
Numero di telefono
Sì
Si noti che tutti i campi sono obbligatori, perché tutti i parametri della stored procedure richiedono valori. Si noti anche che il tipo di dati per i campi Telefono e Fax sono Phone Number. Anche se sono memorizzati nel database come nvarchar, è possibile usufruire dei tipi aziendali personalizzati di LightSwitch a livello client.
Per aggiungere una schermata
Nella barra Prospettiva di Entity Designer scegliere HTMLClient.
Nella barra degli strumenti scegliere il pulsante Schermata.
Nella finestra di dialogo Aggiungi nuova schermata scegliere il modello Set di schermate comuni; nella casella di testo Nome set schermate immettere Clienti e nell'elenco Dati della schermata scegliere NewCustomer, quindi fare clic su OK.
Per chiamare la stored procedure
In Esplora soluzioni aprire il menu di scelta rapida per il nodo NorthwindSP.Server e scegliere Aggiungi, Riferimento.
Nella finestra di dialogo Aggiungi riferimento selezionare la casella di controllo System.Configuration, quindi scegliere il pulsante OK.
In Esplora soluzioni aprire il menu di scelta rapida per il nodo NewCustomer.lsml e scegliere Apri.
Nella barra Prospettiva di Entity Designer scegliere Server.
Nella barra degli strumenti espandere l'elenco Scrivi codice e scegliere NewCustomers_Inserting.
In Editor del codice sostituire il contenuto esistente con il codice seguente:
Imports System.Configuration Imports System.Data Imports System.Data.SqlClient Namespace LightSwitchApplication Public Class ApplicationDataService Private Sub NewCustomers_Inserting(entity As NewCustomer) Using connection = New SqlConnection Dim connectionStringName = Me.DataWorkspace.NorthwindData.Details.Name connection.ConnectionString = ConfigurationManager.ConnectionStrings(connectionStringName).ConnectionString Dim procedure = "dbo.InsertCustomer" Using command = New SqlCommand(procedure, connection) command.CommandType = CommandType.StoredProcedure command.Parameters.Add( New SqlParameter("@CustomerID", entity.CustomerID)) command.Parameters.Add( New SqlParameter("@CompanyName", entity.CompanyName)) command.Parameters.Add( New SqlParameter("@ContactName", entity.ContactName)) command.Parameters.Add( New SqlParameter("@ContactTitle", entity.ContactTitle)) command.Parameters.Add( New SqlParameter("@Address", entity.Address)) command.Parameters.Add( New SqlParameter("@City", entity.City)) command.Parameters.Add( New SqlParameter("@Region", entity.Region)) command.Parameters.Add( New SqlParameter("@PostalCode", entity.PostalCode)) command.Parameters.Add( New SqlParameter("@Country", entity.Country)) command.Parameters.Add( New SqlParameter("@Phone", entity.Phone)) command.Parameters.Add( New SqlParameter("@Fax", entity.Fax)) connection.Open() command.ExecuteNonQuery() End Using End Using End Sub End Class End Namespace
using Microsoft.VisualBasic; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.Configuration; using System.Data.SqlClient; namespace LightSwitchApplication { public class ApplicationDataService { private void NewCustomers_Inserting(NewCustomer entity) { using (connection == new SqlConnection()) { dynamic connectionStringName = this.DataWorkspace.NorthwindData.Details.Name; connection.ConnectionString = ConfigurationManager.ConnectionStrings(connectionStringName).ConnectionString; dynamic procedure = "dbo.InsertCustomer"; using (command == new SqlCommand(procedure, connection)) { command.CommandType = CommandType.StoredProcedure; command.Parameters.Add(new SqlParameter("@CustomerID", entity.CustomerID)); command.Parameters.Add(new SqlParameter("@CompanyName", entity.CompanyName)); command.Parameters.Add(new SqlParameter("@ContactName", entity.ContactName)); command.Parameters.Add(new SqlParameter("@ContactTitle", entity.ContactTitle)); command.Parameters.Add(new SqlParameter("@Address", entity.Address)); command.Parameters.Add(new SqlParameter("@City", entity.City)); command.Parameters.Add(new SqlParameter("@Region", entity.Region)); command.Parameters.Add(new SqlParameter("@PostalCode", entity.PostalCode)); command.Parameters.Add(new SqlParameter("@Country", entity.Country)); command.Parameters.Add(new SqlParameter("@Phone", entity.Phone)); command.Parameters.Add(new SqlParameter("@Fax", entity.Fax)); connection.Open(); command.ExecuteNonQuery(); } } } } }
Quando viene inserito un nuovo record nella tabella NewCustomers, questo codice viene eseguito, aprendo una connessione al database Northwind ed eseguendo le stored procedure InsertCustomer, in modo da fornire i valori nell'entità NewCustomer come parametri alla stored procedure.
Per eseguire il test dell'app
In Editor del codice impostare un punto di interruzione nel metodo NewCustomers_Inserting.
Eseguire l'app e nella schermata CustomersSet scegliere il pulsante Aggiungi.
Nella schermata Clienti riempire tutti i campi e scegliere il pulsante Salva.
Si noti che il punto di interruzione è premuto, dimostrando il funzionamento del codice; premere F5 per continuare. Se si apre la tabella Customers del database Northwind, verrà visualizzato il nuovo record di cliente.
Passaggi successivi
È possibile creare schermate e la logica di business di LightSwitch come di consueto e creare in modo semplice e rapido un'applicazione funzionante tramite le stored procedure.
Vedere anche
Attività
Procedura: eseguire una stored procedure in LightSwitch