Практическое руководство. Выполнение хранимой процедуры в 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;
Для выполнения является хранимой процедуры необходимо изменить имена и параметры в соответствии с ней.
Выполнение хранимой процедуры
Создайте таблицу встроенной в базе данных, содержащей входные параметры хранимой процедуры.
В Обозреватель решений откройте контекстное меню узла Источники данных, а затем выберите Добавить таблицу.
В окне Свойства в поле Имя введите UpdateEmployeePersonalInfoUpdate.
Примечание Как правило, замените UpdateEmployeePersonalInfoOperation с именем хранимой процедуры, которую нужно выполнить и идентификатора, например "операция", чтобы знаменовать, что эта таблица используется для хранимой процедуры.
Добавьте в таблицу следующие поля:
Имя
Тип
Требуется
КодСотрудника
Integer
Да
NationalIDNumber
Строка.
Да
День рождения
Дата/время
Да
MaritalStatus
Строка.
Да
Пол
Строка.
Да
Примечание В полях Имя и Тип замените значения с именами и типами данных для каждого входного параметра в хранимой процедуре, и убедитесь, что все поля помечаются по мере необходимости.
Добавьте ссылку на класс ConfigurationManager.
В Обозреватель решений выберите кнопку панели инструментов Показать все файлы.
Открыть контекстное меню для узла Сервер, а затем выберите Добавить ссылку.
В диалоговом окне Диспетчер ссылок разверните узел Сборки, выберите узел Платформа, а затем выберите флажок System.Configuration.
В списке Запись кода выберите метод Вставка (в данном случае метод UpdateEmployeePersonalInfoOperations_Inserting ).
Добавьте код, который будет выглядеть примерно так:
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 и имена и значения параметров с этими для вашей собственной хранимой процедуры.
Вызвать хранимую процедуру с экрана
В Конструктор экрана откройте контекстное меню узла Панель команд экрана, а затем выберите Добавить кнопку.
В диалоговом окне Добавить кнопку выберите переключатель Новый метод.
В текстовом поле Имя введите UpdateEmployeeInfo.
Примечание Можно заменить имя, которое описывает, что хранимая процедура работает.
В Конструктор экрана откройте контекстное меню для узла кнопки, а затем выберите Изменить код Execute.
Добавьте код, который будет выглядеть примерно так:
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 обновляет только элемент, указанный.
Определить разрешения для хранимой процедуры
В Обозреватель решений откройте контекстное меню узла Свойства, а затем выберите Открыть.
На вкладке Управление доступом выберите тип проверки подлинности для использования, если он еще не указан.
Выберите <Add New Permission> ссылку, а затем и введите UpdatePersonalInfo.
Примечание Можно заменить имя, которое описывает, что хранимая процедура работает.
В Обозреватель решений откройте контекстное меню для таблицы хранимой процедуры, а затем выберите Открыть.
В списке Запись кода выберите метод CanInsert.
Добавьте код, который будет выглядеть примерно так:
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