Comment : exécuter une procédure stockée dans LightSwitch
les applications d'LightSwitch peuvent exécuter des procédures stockées dans une base de données SQL Server en appelant de la couche du serveur.Vous pouvez créer des commandes sur la couche cliente de déclencher l'exécution, et vous pouvez définir des autorisations pour contrôler qui a accès aux procédures stockées.
De nombreuses bases de données existantes utilisent des procédures stockées parce qu'elles ont des avantages par rapport à d'autres types d'interaction avec la base de données tels que la programmation modulaire, l'exécution plus rapide, et le trafic réseau réduite.Ces mêmes avantages s'appliquent à exécuter des procédures stockées de votre application pour LightSwitch .
Les procédures suivantes utilisent la procédure stockée uspUpdateEmployeePersonalInfo de l'exemple de base de données 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;
Pour exécuter une procédure stockée, vous devez modifier les noms et les paramètres pour l'correspondre.
Pour exécuter une procédure stockée
Créez une table dans la base de données intrinsèque qui contient les paramètres d'entrée pour la procédure stockée.
Dans Explorateur de solutions, ouvrez le menu contextuel du nœud Sources de données, puis choisissez Ajouter une table.
Dans la fenêtre Propriétés, dans la zone Nom, entrez UpdateEmployeePersonalInfoUpdate.
[!REMARQUE]
Vous remplacerez en général UpdateEmployeePersonalInfoOperation par le nom de la procédure stockée que vous souhaitez exécuter plus un identificateur tel que « opération » pour indiquer que ce tableau est utilisé pour une procédure stockée.
Ajoutez des champs suivants à la table :
Nom
Type
Obligatoire
ID Employé
Entier
Oui
NationalIDNumber
Chaîne
Oui
Date de naissance
Date et heure
Oui
MaritalStatus
Chaîne
Oui
Sexe
Chaîne
Oui
[!REMARQUE]
Dans les domaines Nom et de Type, remplacez les valeurs par les noms et les types de données pour chaque paramètre d'entrée dans votre procédure stockée, et assurez-vous que tous les champs sont marqués comme requis.
Ajoutez une référence à la classe d' ConfigurationManager .
Dans Explorateur de solutions, choisissez le bouton de barre d'outils Afficher tous les fichiers .
Ouvrez le menu contextuel du nœud Serveur, puis choisissez Ajouter une référence.
Dans la boîte de dialogue Gestionnaire de références, développez le nœud Assemblys, sélectionnez le nœud framework, puis activez la case à cocher System.Configuration .
Dans la liste Écrire le code, sélectionnez la méthode Insère (dans ce cas, la méthode UpdateEmployeePersonalInfoOperations_Inserting ).
Ajoutez le code similaire à l'exemple suivant :
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(); } }
Ce code crée un objet d' SqlConnection et obtient la chaîne de connexion du fichier Web.config.Le code crée un objet de SqlCommand avec le texte de la commande obligatoire, ajoute les valeurs de paramètre, et exécute la commande.Enfin DiscardChanges est appelé ; vous n'avez pas besoin d'enregistrer les modifications dans le tableau UpdateEmployeePersonalInfoOperation .
[!REMARQUE]
Vous devez remplacer le nom DataWorkspace et les noms et les valeurs de paramètre par celles de votre propre procédure stockée.
Pour appeler la procédure stockée d'un écran
Dans Concepteur d'écran, ouvrez le menu contextuel du nœud Barre de commandes de l'écran, puis choisissez Bouton Ajouter.
Dans la boîte de dialogue Bouton Ajouter, sélectionnez la case d'option Nouvelle méthode .
Dans la zone de texte Nom, entrez UpdateEmployeeInfo.
[!REMARQUE]
Vous pouvez substituer un nom qui décrit ce que fait votre procédure stockée.
Dans Concepteur d'écran, ouvrez le menu contextuel du nœud de bouton, puis choisissez Modifier le code d'exécution.
Ajoutez le code similaire à l'exemple suivant :
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(); }
Ce code crée d'abord DataWorkspace et crée ensuite UpdateEmployeePersonalInfoOperation à l'aide de ApplicationDatadu DataWorkspace nouvellement créée.Les valeurs de l'exécution sont assignées, et l'opération est appelée en appelant SaveChanges.Cette étape déclenche la méthode d' UpdateEmployeePersonalInfoOperations_Inserting de couche intermédiaire qui exécute la procédure stockée dans la base de données.
Conseil Les données d'écran ne sont pas actualisées pour refléter les modifications lorsque vous appelez la procédure stockée.Pour actualiser l'écran, vous pouvez appeler Employees.Refresh() ou DataWorkspace.AdventureWorksData.Employees_Single(operation.EmployeeID) à la fin de la méthode d' Execute du bouton.Notez qu' Employees.Refresh() actualise tous les enregistrements, et Employees_Single actualise seul l'élément que vous spécifiez.
Pour définir des autorisations pour une procédure stockée
Dans Explorateur de solutions, ouvrez le menu contextuel du nœud Propriétés, puis choisissez Ouvrir.
Sous l'onglet de Contrôle d’accès, sélectionnez le type d'authentification à utiliser si ce n'est pas déjà spécifié.
Cliquez <Add New Permission> sur le lien, puis et entrez UpdatePersonalInfo.
[!REMARQUE]
Vous pouvez substituer un nom qui décrit ce que fait votre procédure stockée.
Dans Explorateur de solutions, ouvrez le menu contextuel pour votre table de procédure stockée, puis choisissez Ouvrir.
Dans la liste Écrire le code, sélectionnez la méthode CanInsert .
Ajoutez le code similaire à l'exemple suivant :
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); }
Voir aussi
Tâches
Procédure pas à pas : mise à jour d'enregistrements à l'aide des procédures stockées
Authentification et autorisation LightSwitch