Udostępnij za pośrednictwem


Porady: wykonywanie w programie LightSwitch procedury przechowywanej

LightSwitchaplikacje można wykonać procedur przechowywanych w bazie danych programu SQL Server, wzywając ich z poziomu serwera.Można tworzyć przy użyciu polecenia, w warstwie klienta, aby wyzwolić wykonanie i można zdefiniować uprawnienia do kontrolowania, kto ma dostęp do procedur przechowywanych.

Wielu istniejących baz danych używać procedur przechowywanych, ponieważ mają zalety w stosunku do innych rodzajów interakcji bazy danych, takim jak programowanie modułowa, szybsze wykonywanie i zmniejszyć ruch w sieci.Do wspomnianych zalet tego samego stosuje się do wykonywania procedury przechowywanej z Twojej LightSwitch aplikacji.

Poniższe procedury należy uspUpdateEmployeePersonalInfo procedura przechowywana z przykładowej bazy danych 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;

Aby wykonać inną procedurę składowaną, należy zmienić nazwy i parametry do niego.

Aby wykonać procedurę przechowywaną

  1. Utwórz tabelę w wewnętrznej bazy danych, która zawiera parametry wejściowe dla procedury przechowywanej.

    1. W Solution Explorer, otwórz menu skrótów dla Źródła danych węzła, a następnie wybierz polecenie Dodaj tabelę.

    2. W Właściwości okno, w Nazwa wprowadź UpdateEmployeePersonalInfoUpdate.

      [!UWAGA]

      Zazwyczaj zastąpi UpdateEmployeePersonalInfoOperation z nazwą procedury przechowywanej, którą chcesz wykonać plus identyfikator, taki jak "Działanie" oznacza, że ta tabela jest używana dla procedury przechowywanej.

    3. Do tabeli, należy dodać następujące pola:

      Nazwa

      Typ

      Wymagane

      Pole IDPracownika

      Liczba całkowita

      Tak

      NationalIDNumber

      Ciąg

      Tak

      Data urodzenia

      Data Godzina

      Tak

      MaritalStatus

      Ciąg

      Tak

      Płeć

      Ciąg

      Tak

      [!UWAGA]

      W Nazwa i typu pola, Zastąp wartości za pomocą nazwy i typy danych dla każdego parametru w Twoją procedurę składowaną wejściowego i zapewnienia, że wszystkie pola są oznaczone jako wymagane.

  2. Dodaj odwołanie do ConfigurationManager klasy.

    1. W Solution Explorer, wybierz polecenie Pokaż wszystkie pliki przycisk paska narzędzi.

    2. Otwarcie menu skrótów dla serwera węzła, a następnie wybierz polecenie Dodaj odwołanie.

    3. W Reference Manager okno dialogowe rozwiń zespoły węzeł, wybierz polecenie Framework węzła, a następnie wybierz System.Configuration pole wyboru.

  3. W Pisanie kodu listy, wybierz polecenie Wstawianie metody (w tym wypadku UpdateEmployeePersonalInfoOperations_Inserting metoda).

  4. Dodaj kod, przypominająca poniższy przykład:

    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();
        }
    }
    

    Kod ten tworzy SqlConnection object i ciąg połączenia są pobierane z pliku web.config.Następnie tworzony SqlCommand obiekt z tekstem wymagane polecenie dodaje wartości parametrów i wykonuje polecenie.Na koniec DiscardChanges nazywa się; nie musisz zapisać zmiany w UpdateEmployeePersonalInfoOperation tabeli.

    [!UWAGA]

    Należy zastąpić DataWorkspace nazwy oraz nazwy parametrów i wartości z wartościami do własnego procedury przechowywanej.

Aby wywołać procedury przechowywanej z ekranu

  1. W Projektanta ekranu, otwórz menu skrótów dla Pasek poleceń ekranu węzła, a następnie wybierz polecenie Przycisk Dodaj.

  2. W Przycisk Dodaj okno dialogowe Wybierz Nowa metoda przycisku opcji.

  3. W Nazwa tekst wprowadź UpdateEmployeeInfo.

    [!UWAGA]

    Można zastąpić nazwę, która opisuje, co robi Twoją procedurę składowaną.

  4. W Projektanta ekranu, otwórz menu skrótów dla węzła przycisk, a następnie wybierz Edytuj wykonanie kodu.

  5. Dodaj kod, przypominająca poniższy przykład:

    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();
    }
    

    Ten kod najpierw tworzy DataWorkspace , a następnie tworzy UpdateEmployeePersonalInfoOperation przy użyciu nowo utworzony DataWorkspace ApplicationData.Przypisano odpowiednie wartości dla operacji, a operacja została wywołana przez wywołanie SaveChanges.W tym kroku wyzwala warstwa środkowa UpdateEmployeePersonalInfoOperations_Inserting metodę, która wykonuje procedura przechowywana w bazie danych.

    PoradaPorada

    Dane ekranu nie jest odświeżana zgodnie ze zmianami przy wywoływaniu procedury przechowywanej.Aby odświeżyć ekran, można albo zadzwoń Employees.Refresh() lub DataWorkspace.AdventureWorksData.Employees_Single(operation.EmployeeID) na końcu przycisku Execute metoda.Należy zauważyć, że Employees.Refresh() odświeża wszystkie rekordy, a Employees_Single odświeża tylko dla elementu, który określisz.

Aby zdefiniować uprawnienia dla procedury przechowywanej

  1. W Solution Explorer, otwórz menu skrótów dla Właściwości węzła, a następnie wybierz polecenie Otwórz.

  2. Na Kontroli dostępu tab, wybrać typ uwierzytelniania, jeśli nie zostanie określona.

  3. Wybierz polecenie < Dodaj nowe uprawnienie > łącze, a następnie i wprowadź UpdatePersonalInfo.

    [!UWAGA]

    Można zastąpić nazwę, która opisuje, co robi Twoją procedurę składowaną.

  4. W Solution Explorer, otwórz menu skrótów dla procedury przechowywanej tabeli, a następnie wybierz Otwórz.

  5. W Pisanie kodu listy, wybierz polecenie CanInsert metoda.

  6. Dodaj kod, przypominająca poniższy przykład:

    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);
    }
    

Zobacz też

Zadania

Wskazówki: aktualizowanie rekordów przy użyciu procedur przechowywanych

Uwierzytelnianie i autoryzacja w programie LightSwitch

Koncepcje

Praca z obiektami związanymi z danymi w kodzie