Поделиться через


Практическое руководство. Выполнение хранимой процедуры в LightSwitch

приложения LightSwitch могут выполнять хранимые процедуры в базе данных SQL Server, вызвав их из уровня сервера.Можно создать команды на клиентском уровне активировать выполнение, а также можно задать разрешения на элемент управления, который имеет доступ к хранимым процедурам.

Многие существующих баз данных используют хранимые процедуры, поскольку они имеют преимущества по сравнению с другими типами взаимодействия базы данных, например модульное программирование, более быстрое выполнение и сокращенный сетевой трафик.Эти же преимущества применяются для выполнения хранимых процедур из приложения LightSwitch.

Следующие процедуры используют хранимую процедуру uspUpdateEmployeePersonalInfo из базы данных 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;

Для выполнения является хранимой процедуры необходимо изменить имена и параметры в соответствии с ней.

Выполнение хранимой процедуры

  1. Создайте таблицу встроенной в базе данных, содержащей входные параметры хранимой процедуры.

    1. В Обозреватель решений откройте контекстное меню узла Источники данных, а затем выберите Добавить таблицу.

    2. В окне Свойства в поле Имя введите UpdateEmployeePersonalInfoUpdate.

      ПримечаниеПримечание

      Как правило, замените UpdateEmployeePersonalInfoOperation с именем хранимой процедуры, которую нужно выполнить и идентификатора, например "операция", чтобы знаменовать, что эта таблица используется для хранимой процедуры.

    3. Добавьте в таблицу следующие поля:

      Имя

      Тип

      Требуется

      КодСотрудника

      Integer

      Да

      NationalIDNumber

      Строка.

      Да

      День рождения

      Дата/время

      Да

      MaritalStatus

      Строка.

      Да

      Пол

      Строка.

      Да

      ПримечаниеПримечание

      В полях Имя и Тип замените значения с именами и типами данных для каждого входного параметра в хранимой процедуре, и убедитесь, что все поля помечаются по мере необходимости.

  2. Добавьте ссылку на класс ConfigurationManager.

    1. В Обозреватель решений выберите кнопку панели инструментов Показать все файлы.

    2. Открыть контекстное меню для узла Сервер, а затем выберите Добавить ссылку.

    3. В диалоговом окне Диспетчер ссылок разверните узел Сборки, выберите узел Платформа, а затем выберите флажок System.Configuration.

  3. В списке Запись кода выберите метод Вставка (в данном случае метод UpdateEmployeePersonalInfoOperations_Inserting ).

  4. Добавьте код, который будет выглядеть примерно так:

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

    Этот код создает объект SqlConnection и получает строку подключения из файла web.config.Затем в коде создается объект SqlCommand с измененным текстом команды, добавить параметры, и выполняет команду.Наконец вызывается метод DiscardChanges. не требуется сохранить изменения в таблице UpdateEmployeePersonalInfoOperation.

    ПримечаниеПримечание

    Необходимо заменить имя DataWorkspace и имена и значения параметров с этими для вашей собственной хранимой процедуры.

Вызвать хранимую процедуру с экрана

  1. В Конструктор экрана откройте контекстное меню узла Панель команд экрана, а затем выберите Добавить кнопку.

  2. В диалоговом окне Добавить кнопку выберите переключатель Новый метод.

  3. В текстовом поле Имя введите UpdateEmployeeInfo.

    ПримечаниеПримечание

    Можно заменить имя, которое описывает, что хранимая процедура работает.

  4. В Конструктор экрана откройте контекстное меню для узла кнопки, а затем выберите Изменить код Execute.

  5. Добавьте код, который будет выглядеть примерно так:

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

    Этот код сначала создает DataWorkspace и создает UpdateEmployeePersonalInfoOperation с помощью ApplicationData созданного DataWorkspace.Значения для каждой операции, а операция вызывается путем вызова SaveChanges.Этот шаг будет активировать метод UpdateEmployeePersonalInfoOperations_Inserting среднего уровня, который выполняет хранимую процедуру в базе данных.

    СоветСовет

    Данные экрана не обновляются для отражения изменений при вызове хранимой процедуры.Для обновления экрана можно вызвать метод Employees.Refresh() или DataWorkspace.AdventureWorksData.Employees_Single(operation.EmployeeID) в конце метода Execute кнопки.Обратите внимание, что Employees.Refresh() обновляет все записи, и Employees_Single обновляет только элемент, указанный.

Определить разрешения для хранимой процедуры

  1. В Обозреватель решений откройте контекстное меню узла Свойства, а затем выберите Открыть.

  2. На вкладке Управление доступом выберите тип проверки подлинности для использования, если он еще не указан.

  3. Выберите <Add New Permission> ссылку, а затем и введите UpdatePersonalInfo.

    ПримечаниеПримечание

    Можно заменить имя, которое описывает, что хранимая процедура работает.

  4. В Обозреватель решений откройте контекстное меню для таблицы хранимой процедуры, а затем выберите Открыть.

  5. В списке Запись кода выберите метод CanInsert.

  6. Добавьте код, который будет выглядеть примерно так:

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

См. также

Задачи

Пошаговое руководство. Обновление записей с помощью хранимых процедур

Аутентификация и авторизация LightSwitch

Основные понятия

Работа с объектами, связанными с данными, в коде