Partager via


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

  1. 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.

    1. Dans Explorateur de solutions, ouvrez le menu contextuel du nœud Sources de données, puis choisissez Ajouter une table.

    2. 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.

    3. 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.

  2. Ajoutez une référence à la classe d' ConfigurationManager .

    1. Dans Explorateur de solutions, choisissez le bouton de barre d'outils Afficher tous les fichiers .

    2. Ouvrez le menu contextuel du nœud Serveur, puis choisissez Ajouter une référence.

    3. 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 .

  3. Dans la liste Écrire le code, sélectionnez la méthode Insère (dans ce cas, la méthode UpdateEmployeePersonalInfoOperations_Inserting ).

  4. 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

  1. Dans Concepteur d'écran, ouvrez le menu contextuel du nœud Barre de commandes de l'écran, puis choisissez Bouton Ajouter.

  2. Dans la boîte de dialogue Bouton Ajouter, sélectionnez la case d'option Nouvelle méthode .

  3. 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.

  4. Dans Concepteur d'écran, ouvrez le menu contextuel du nœud de bouton, puis choisissez Modifier le code d'exécution.

  5. 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.

    ConseilConseil

    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

  1. Dans Explorateur de solutions, ouvrez le menu contextuel du nœud Propriétés, puis choisissez Ouvrir.

  2. 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é.

  3. 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.

  4. Dans Explorateur de solutions, ouvrez le menu contextuel pour votre table de procédure stockée, puis choisissez Ouvrir.

  5. Dans la liste Écrire le code, sélectionnez la méthode CanInsert .

  6. 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

Concepts

Utilisation d'objets liés aux données dans le code