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


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

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

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

Обязательные компоненты

В данном пошаговом руководстве используется учебная база данных Northwind.

Создание хранимой процедуры

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

Добавление хранимой процедуры

  1. В строке меню выберите Вид, Обозреватель объектов SQL Server.

  2. В окне Обозреватель объектов SQL Server разверните узел базы данных NORTHWIND и выберите элемент Программируемость.

  3. Разверните узел Программируемость и выберите элемент Хранимые процедуры.

  4. Откройте контекстное меню элемента Хранимые процедуры и выберите команду Добавить новую хранимую процедуру.

  5. В окне Редактор кода замените содержимое представленным ниже кодом 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)
    
  6. В диалоговом окне Предварительный просмотр обновления базы данных нажмите кнопку Обновить базу данных.

    В базу данных будет добавлена хранимая процедура InsertCustomer.

Создание приложения LightSwitch

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

Создание приложения

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

  2. В диалоговом окне создания проекта разверните узел Visual Basic или Visual C#, а затем выберите шаблон LightSwitch.

  3. В текстовом поле Имя введите NorthwindSP и нажмите кнопку ОК.

Добавление источника данных

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

  2. В мастере присоединения к источнику данных выберите элемент База данных и нажмите кнопку Далее.

  3. В диалоговом окне Свойства подключения введите сведения о подключении для базы данных Northwind и нажмите кнопку ОК.

  4. На странице выбора объектов базы данных разверните узел Таблицы, установите флажок Клиенты и нажмите кнопку Готово.

Добавление локальной таблицы

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

  2. В окне Свойства выберите свойство Имя и введите NewCustomer.

  3. В Entity Designer добавьте следующие поля.

    Имя

    Тип

    Обязательно

    CustomerID

    Строковое

    Да

    CompanyName

    Строковое

    Да

    ContactName

    Строковое

    Да

    ContactTitle

    Строковое

    Да

    Адрес

    Строковое

    Да

    Город

    Строковое

    Да

    Region

    Строковое

    Да

    PostalCode

    Строковое

    Да

    Country

    Строковое

    Да

    Phone

    Номер телефона

    Да

    Факс

    Номер телефона

    Да

    Обратите внимание, что все поля обязательны для заполнения. Это потому, что все параметры для хранимой процедуры должны иметь значения. Также обратите внимание, что тип данных для полей Телефон и факс — Phone Number. Несмотря на то, что все эти значения хранятся в базе данных как значения с типом nvarchar, на уровне клиента можно использовать преимущество настраиваемых бизнес-типов в LightSwitch.

Добавление экрана

  1. В Entity Designer на панели Перспектива выберите HTMLClient.

  2. В панели инструментов нажмите кнопку "Экран".

  3. В диалоговом окне добавления нового экрана выберите шаблон Общий набор экранов, в текстовом поле Имя набора экранов введите Клиенты, в списке Данные экрана выберите NewCustomer и нажмите кнопку ОК.

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

  1. В обозревателе решений откройте контекстное меню для узла NorthwindSP.Server и последовательно выберите пункты Добавить и Ссылка.

  2. В диалоговом окне добавления ссылки установите флажок System.Configuration и нажмите кнопку ОК.

  3. В обозревателе решений откройте контекстное меню для узла NewCustomer.lsml и выберите пункт Открыть.

  4. В Entity Designer на панели Перспектива выберите Сервер.

  5. В панели инструментов разверните список Запись кода и выберите NewCustomers_Inserting.

  6. В редакторе кода замените существующий код следующим кодом.

    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 в качестве параметров для хранимой процедуры.

Тестирование приложения

  1. В редакторе кода задайте точку останова в методе NewCustomers_Inserting.

  2. Запустите приложение и на экране CustomersSet нажмите кнопку Добавить.

  3. На экране Клиенты заполните все поля и нажмите кнопку Сохранить

    Обратите внимание, что достигнута точка останова — это показывает, что код работает. Для продолжения нажмите клавишу F5. При открытии таблицы Customers базы данных Northwind вы увидите новую запись клиента.

Следующие действия

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

См. также

Задачи

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

Другие ресурсы

Данные: источники сведений для приложения