Пошаговое руководство. Использование хранимых процедур
Нельзя вызвать хранимую процедуру в базе данных SQL Server непосредственно из LightSwitch, но можно создать локальную таблицу в приложении LightSwitch, содержащую параметры для хранимой процедуры, а затем вызывать хранимую процедуру из события уровня сервера. В этом пошаговом руководстве показано, как вставить записи клиента в базу данных SQL с помощью хранимых процедур.
Многие администраторы баз данных не разрешают прямой доступ к таблицам, предоставляя вместо этого представления только для чтения и хранимые процедуры для ввода, обновления и удаления записей. LightSwitch не распознает хранимые процедуры, поэтому любая база данных, в которой они применяются для обновления записей, сначала может показаться неиспользуемой. При выполнении небольшой дополнительной работы можно действительно использовать эти базы из LightSwitch.
Обязательные компоненты
В данном пошаговом руководстве используется учебная база данных Northwind.
Создание хранимой процедуры
В большинстве случаев вы будете иметь доступ к хранимым процедурам, уже существующим в базе данных. В базе данных Northwind нет необходимой хранимой процедуры для вставки записей клиентов, поэтому ее нужно добавить.
Добавление хранимой процедуры
В строке меню выберите Вид, Обозреватель объектов SQL Server.
В окне Обозреватель объектов SQL Server разверните узел базы данных NORTHWIND и выберите элемент Программируемость.
Разверните узел Программируемость и выберите элемент Хранимые процедуры.
Откройте контекстное меню элемента Хранимые процедуры и выберите команду Добавить новую хранимую процедуру.
В окне Редактор кода замените содержимое представленным ниже кодом Transact-SQL и нажмите кнопку Обновить.
CREATE Procedure [dbo].[InsertCustomer] @CustomerID nchar(5), @CompanyName nvarchar(40), @ContactName nvarchar(30), @ContactTitle nvarchar(30), @Address nvarchar(60), @City nvarchar(15), @Region nvarchar(15), @PostalCode nvarchar(10), @Country nvarchar(15), @Phone nvarchar(24), @Fax nvarchar(24) AS INSERT INTO [dbo].[Customers] ([CustomerID] ,[CompanyName] ,[ContactName] ,[ContactTitle] ,[Address] ,[City] ,[Region] ,[PostalCode] ,[Country] ,[Phone] ,[Fax]) VALUES (@CustomerID ,@CompanyName ,@ContactName ,@ContactTitle ,@Address ,@City ,@Region ,@PostalCode ,@Country ,@Phone ,@Fax)
В диалоговом окне Предварительный просмотр обновления базы данных нажмите кнопку Обновить базу данных.
В базу данных будет добавлена хранимая процедура InsertCustomer.
Создание приложения LightSwitch
На этом этапе необходимо создать приложение для вызова хранимой процедуры и добавления новых клиентов в базу данных Northwind.
Создание приложения
В строке меню последовательно выберите пункты Файл, Создать, Проект.
В диалоговом окне создания проекта разверните узел Visual Basic или Visual C#, а затем выберите шаблон LightSwitch.
В текстовом поле Имя введите NorthwindSP и нажмите кнопку ОК.
Добавление источника данных
В обозревателе решений откройте контекстное меню для узла Источники данных и выберите команду Добавить источник данных.
В мастере присоединения к источнику данных выберите элемент База данных и нажмите кнопку Далее.
В диалоговом окне Свойства подключения введите сведения о подключении для базы данных Northwind и нажмите кнопку ОК.
На странице выбора объектов базы данных разверните узел Таблицы, установите флажок Клиенты и нажмите кнопку Готово.
Добавление локальной таблицы
В обозревателе решений откройте контекстное меню для узла Источники данных и выберите команду Добавить таблицу.
В окне Свойства выберите свойство Имя и введите NewCustomer.
В Entity Designer добавьте следующие поля.
Имя
Тип
Обязательно
CustomerID
Строковое
Да
CompanyName
Строковое
Да
ContactName
Строковое
Да
ContactTitle
Строковое
Да
Адрес
Строковое
Да
Город
Строковое
Да
Region
Строковое
Да
PostalCode
Строковое
Да
Country
Строковое
Да
Phone
Номер телефона
Да
Факс
Номер телефона
Да
Обратите внимание, что все поля обязательны для заполнения. Это потому, что все параметры для хранимой процедуры должны иметь значения. Также обратите внимание, что тип данных для полей Телефон и факс — Phone Number. Несмотря на то, что все эти значения хранятся в базе данных как значения с типом nvarchar, на уровне клиента можно использовать преимущество настраиваемых бизнес-типов в LightSwitch.
Добавление экрана
В Entity Designer на панели Перспектива выберите HTMLClient.
В панели инструментов нажмите кнопку "Экран".
В диалоговом окне добавления нового экрана выберите шаблон Общий набор экранов, в текстовом поле Имя набора экранов введите Клиенты, в списке Данные экрана выберите NewCustomer и нажмите кнопку ОК.
Вызов хранимой процедуры
В обозревателе решений откройте контекстное меню для узла NorthwindSP.Server и последовательно выберите пункты Добавить и Ссылка.
В диалоговом окне добавления ссылки установите флажок System.Configuration и нажмите кнопку ОК.
В обозревателе решений откройте контекстное меню для узла NewCustomer.lsml и выберите пункт Открыть.
В Entity Designer на панели Перспектива выберите Сервер.
В панели инструментов разверните список Запись кода и выберите NewCustomers_Inserting.
В редакторе кода замените существующий код следующим кодом.
Imports System.Configuration Imports System.Data Imports System.Data.SqlClient Namespace LightSwitchApplication Public Class ApplicationDataService Private Sub NewCustomers_Inserting(entity As NewCustomer) Using connection = New SqlConnection Dim connectionStringName = Me.DataWorkspace.NorthwindData.Details.Name connection.ConnectionString = ConfigurationManager.ConnectionStrings(connectionStringName).ConnectionString Dim procedure = "dbo.InsertCustomer" Using command = New SqlCommand(procedure, connection) command.CommandType = CommandType.StoredProcedure command.Parameters.Add( New SqlParameter("@CustomerID", entity.CustomerID)) command.Parameters.Add( New SqlParameter("@CompanyName", entity.CompanyName)) command.Parameters.Add( New SqlParameter("@ContactName", entity.ContactName)) command.Parameters.Add( New SqlParameter("@ContactTitle", entity.ContactTitle)) command.Parameters.Add( New SqlParameter("@Address", entity.Address)) command.Parameters.Add( New SqlParameter("@City", entity.City)) command.Parameters.Add( New SqlParameter("@Region", entity.Region)) command.Parameters.Add( New SqlParameter("@PostalCode", entity.PostalCode)) command.Parameters.Add( New SqlParameter("@Country", entity.Country)) command.Parameters.Add( New SqlParameter("@Phone", entity.Phone)) command.Parameters.Add( New SqlParameter("@Fax", entity.Fax)) connection.Open() command.ExecuteNonQuery() End Using End Using End Sub End Class End Namespace
using Microsoft.VisualBasic; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.Configuration; using System.Data.SqlClient; namespace LightSwitchApplication { public class ApplicationDataService { private void NewCustomers_Inserting(NewCustomer entity) { using (connection == new SqlConnection()) { dynamic connectionStringName = this.DataWorkspace.NorthwindData.Details.Name; connection.ConnectionString = ConfigurationManager.ConnectionStrings(connectionStringName).ConnectionString; dynamic procedure = "dbo.InsertCustomer"; using (command == new SqlCommand(procedure, connection)) { command.CommandType = CommandType.StoredProcedure; command.Parameters.Add(new SqlParameter("@CustomerID", entity.CustomerID)); command.Parameters.Add(new SqlParameter("@CompanyName", entity.CompanyName)); command.Parameters.Add(new SqlParameter("@ContactName", entity.ContactName)); command.Parameters.Add(new SqlParameter("@ContactTitle", entity.ContactTitle)); command.Parameters.Add(new SqlParameter("@Address", entity.Address)); command.Parameters.Add(new SqlParameter("@City", entity.City)); command.Parameters.Add(new SqlParameter("@Region", entity.Region)); command.Parameters.Add(new SqlParameter("@PostalCode", entity.PostalCode)); command.Parameters.Add(new SqlParameter("@Country", entity.Country)); command.Parameters.Add(new SqlParameter("@Phone", entity.Phone)); command.Parameters.Add(new SqlParameter("@Fax", entity.Fax)); connection.Open(); command.ExecuteNonQuery(); } } } } }
При вставке новой записи в таблицу NewCustomers этот код запускается, открывает подключение к базе данных Northwind и выполняет хранимые процедуры InsertCustomer , предоставляя значения в сущность NewCustomer в качестве параметров для хранимой процедуры.
Тестирование приложения
В редакторе кода задайте точку останова в методе NewCustomers_Inserting.
Запустите приложение и на экране CustomersSet нажмите кнопку Добавить.
На экране Клиенты заполните все поля и нажмите кнопку Сохранить
Обратите внимание, что достигнута точка останова — это показывает, что код работает. Для продолжения нажмите клавишу F5. При открытии таблицы Customers базы данных Northwind вы увидите новую запись клиента.
Следующие действия
Можно обычным способом создать собственные экраны и бизнес-логику LightSwitch, а затем с помощью хранимых процедур просто и быстро создать функционирующее приложение.
См. также
Задачи
Практическое руководство. Выполнение хранимой процедуры в LightSwitch