Создание хранимых процедур и определяемых пользователем функций с помощью управляемого кода (C#)
Microsoft SQL Server 2005 интегрируется с средой CLR .NET, чтобы разработчики могли создавать объекты базы данных с помощью управляемого кода. В этом руководстве показано, как создать управляемые хранимые процедуры и управляемые пользовательские функции с помощью кода Visual Basic или C#. Мы также видим, как эти выпуски Visual Studio позволяют выполнять отладку таких управляемых объектов базы данных.
Введение
Базы данных, такие как Microsoft SQL Server 2005, используют Transact-язык SQL (T-SQL) для вставки, изменения и получения данных. Большинство систем баз данных включают конструкции для группировки ряда инструкций SQL, которые затем можно выполнять как единую единицу многократного использования. Хранимые процедуры являются одним из примеров. Другое — определяемые пользователем функции (ОПРЕДЕЛЯемые пользователем функции), конструкция, которую мы рассмотрим более подробно на шаге 9.
В основном SQL предназначен для работы с наборами данных. Операторы SELECT
, UPDATE
и DELETE
инструкции, по сути, применяются ко всем записям в соответствующей таблице и ограничиваются только их WHERE
предложениями. Тем не менее существует множество функций языка, предназначенных для работы с одной записью за раз и для управления скалярными данными. CURSOR
с разрешением на циклику набора записей по одному за раз. Такие функции обработки строк, как LEFT
, CHARINDEX
и PATINDEX
работа с скалярными данными. SQL также включает инструкции потока управления, такие как IF
и WHILE
.
До Microsoft SQL Server 2005 хранимые процедуры и определяемые пользователем функции можно определить только как коллекцию инструкций T-SQL. Однако SQL Server 2005 был разработан для обеспечения интеграции со средой CLR, которая является средой выполнения, используемой всеми сборками .NET. Следовательно, хранимые процедуры и определяемые пользователем функции в базе данных SQL Server 2005 можно создать с помощью управляемого кода. То есть можно создать хранимую процедуру или UDF в качестве метода в классе C#. Это позволяет использовать эти хранимые процедуры и определяемые пользователем функции в платформа .NET Framework и из собственных пользовательских классов.
В этом руководстве мы рассмотрим, как создавать управляемые хранимые процедуры и определяемые пользователем функции и как интегрировать их в базу данных Northwind. Давайте приступим!
Примечание.
Управляемые объекты базы данных предлагают некоторые преимущества по сравнению с их коллегами SQL. Богатство языка и знакомство, а также возможность повторного использования существующего кода и логики являются основными преимуществами. Но объекты управляемой базы данных, скорее всего, будут менее эффективными при работе с наборами данных, которые не включают в себя большую процедурную логику. Чтобы более подробно обсудить преимущества использования управляемого кода и T-SQL, ознакомьтесь с преимуществами использования управляемого кода для создания объектов базы данных.
Шаг 1. Перемещение базы данных Northwind из App_Data
Все наши учебники до сих пор использовали файл базы данных Microsoft SQL Server 2005 Express Edition в папке веб-приложения App_Data
. Размещение базы данных в App_Data
упрощенном распределении и выполнении этих учебников, так как все файлы находились в одном каталоге и не требовали дополнительных действий по настройке для тестирования учебника.
Однако в этом руководстве давайте переместим базу данных Northwind из App_Data
базы данных Northwind и явно зарегистрируйте ее в экземпляре базы данных SQL Server 2005 Express Edition. Хотя мы можем выполнить действия, описанные в этом руководстве с базой данных в App_Data
папке, несколько шагов упрощаются путем явной регистрации базы данных в экземпляре базы данных SQL Server 2005 Express Edition.
Скачивание для этого учебника содержит два файла базы данных — NORTHWND.MDF
и NORTHWND_log.LDF
— помещены в папку с именем DataFiles
. Если вы следуете вместе с собственной реализацией учебников, закройте Visual Studio и переместите NORTHWND.MDF
NORTHWND_log.LDF
файлы из папки веб-сайта в папку за пределами веб-сайта App_Data
. После перемещения файлов базы данных в другую папку необходимо зарегистрировать базу данных Northwind в экземпляре базы данных SQL Server 2005 Express Edition. Это можно сделать из SQL Server Management Studio. Если на компьютере установлен выпуск SQL Server 2005, отличный от Express Edition, скорее всего, уже установлен Management Studio. Если на компьютере есть только SQL Server 2005 Express Edition, скачайте и установите Microsoft SQL Server Management Studio.
Запустите SQL Server Management Studio. Как показано на рисунке 1, Среда Management Studio начинается с запроса на подключение к серверу. Введите localhost\SQLExpress для имени сервера, выберите проверку подлинности Windows в раскрывающемся списке проверки подлинности и нажмите кнопку "Подключить".
Рис. 1. Подключение к соответствующему экземпляру базы данных
После подключения окно обозреватель объектов отобразит сведения о экземпляре базы данных SQL Server 2005 Express Edition, включая ее базы данных, сведения о безопасности, параметры управления и т. д.
Нам нужно подключить базу данных Northwind в папке DataFiles
(или где бы вы ни могли переместить ее) к экземпляру базы данных SQL Server 2005 Express Edition. Щелкните правой кнопкой мыши папку "Базы данных" и выберите параметр "Присоединить" в контекстном меню. Откроется диалоговое окно "Присоединение баз данных". Нажмите кнопку "Добавить", выполните детализацию до соответствующего NORTHWND.MDF
файла и нажмите кнопку "ОК". На этом этапе экран должен выглядеть примерно так же, как на рис. 2.
Рис. 2. Подключение к соответствующему экземпляру базы данных (щелкните, чтобы просмотреть изображение полного размера)
Примечание.
При подключении к экземпляру SQL Server 2005 Express Edition через Management Studio диалоговое окно "Присоединение баз данных" не позволяет детализировать каталоги профилей пользователей, например "Мои документы". Поэтому не забудьте разместить NORTHWND.MDF
файлы и NORTHWND_log.LDF
файлы в каталоге профилей, отличных от пользователей.
Нажмите кнопку "ОК", чтобы подключить базу данных. Диалоговое окно "Присоединение баз данных" закроется, и обозреватель объектов теперь должен перечислить только что подключенную базу данных. Скорее всего, база данных Northwind имеет такое имя 9FE54661B32FDD967F51D71D0D5145CC_LINE ARTICLES\DATATUTORIALS\VOLUME 3\CSHARP\73\ASPNET_DATA_TUTORIAL_75_CS\APP_DATA\NORTHWND.MDF
. Переименуйте базу данных в Northwind, щелкнув правой кнопкой мыши базу данных и выбрав "Переименовать".
Рис. 3. Переименование базы данных в Northwind
Шаг 2. Создание нового решения и проекта SQL Server в Visual Studio
Чтобы создать управляемые хранимые процедуры или определяемые пользователем функции в SQL Server 2005, мы напишем хранимую процедуру и логику UDF в виде кода C# в классе. После написания кода необходимо скомпилировать этот класс в сборку ( .dll
файл), зарегистрировать сборку в базе данных SQL Server, а затем создать хранимую процедуру или объект UDF в базе данных, которая указывает на соответствующий метод в сборке. Эти действия можно выполнить вручную. Можно создать код в любом текстовом редакторе, скомпилировать его из командной строки с помощью компилятора C# (csc.exe
), зарегистрировать его в базе данных с помощью CREATE ASSEMBLY
команды или из Management Studio, а также добавить хранимую процедуру или объект UDF с помощью аналогичных средств. К счастью, версии Visual Studio профессиональных и team Systems включают тип проекта SQL Server, который автоматизирует эти задачи. В этом руководстве мы рассмотрим тип проекта SQL Server для создания управляемой хранимой процедуры и UDF.
Примечание.
Если вы используете Visual Web Developer или Выпуск Visual Studio уровня "Стандартный", вместо этого вам придется использовать ручной подход. Шаг 13 содержит подробные инструкции по выполнению этих действий вручную. Рекомендуется прочитать шаги 2–12 перед чтением шага 13, так как эти шаги включают важные инструкции по настройке SQL Server, которые должны применяться независимо от используемой версии Visual Studio.
Начните с открытия Visual Studio. В меню "Файл" выберите "Создать проект", чтобы отобразить диалоговое окно "Новый проект" (см. рис. 4). Детализация до типа проекта базы данных, а затем из шаблонов, перечисленных справа, выберите создать проект SQL Server. Я выбрал имя этого проекта ManagedDatabaseConstructs
и поместил его в решение с именем Tutorial75
.
Рис. 4. Создание нового проекта SQL Server (щелкните, чтобы просмотреть изображение полного размера)
Нажмите кнопку "ОК" в диалоговом окне "Создать проект", чтобы создать решение и проект SQL Server.
Проект SQL Server привязан к определенной базе данных. Следовательно, после создания нового проекта SQL Server мы немедленно просим указать эти сведения. На рисунке 5 показан диалоговое окно "Новая ссылка на базу данных", заполненное для указания базы данных Northwind, зарегистрированной в экземпляре базы данных SQL Server 2005 Express Edition еще на шаге 1.
Рис. 5. Связывание проекта SQL Server с базой данных Northwind
Чтобы отладить управляемые хранимые процедуры и определяемые пользователем функции, которые мы создадим в рамках этого проекта, необходимо включить поддержку отладки SQL/CLR для подключения. Всякий раз при связывании проекта SQL Server с новой базой данных (как и на рис. 5), Visual Studio просит нас включить отладку SQL/CLR в соединении (см. рис. 6). Щелкните Да.
Рис. 6. Включение отладки SQL/CLR
На этом этапе в решение добавлен новый проект SQL Server. Он содержит папку Test Scripts
с именем Test.sql
файла, который используется для отладки объектов управляемой базы данных, созданных в проекте. Мы рассмотрим отладку на шаге 12.
Теперь мы можем добавить в этот проект новые управляемые хранимые процедуры и определяемые пользователем функции, но прежде чем сначала включить существующее веб-приложение в решение. В меню "Файл" выберите параметр "Добавить" и выберите "Существующий веб-сайт". Перейдите к соответствующей папке веб-сайта и нажмите кнопку "ОК". Как показано на рисунке 7, решение обновится для включения двух проектов: веб-сайта и ManagedDatabaseConstructs
проекта SQL Server.
Рис. 7. Теперь Обозреватель решений включает два проекта
Значение NORTHWNDConnectionString
в Web.config
настоящее время ссылается на NORTHWND.MDF
файл в папке App_Data
. Так как мы удалили эту базу данных из App_Data
экземпляра базы данных SQL Server 2005 Express Edition и явно зарегистрировали ее, необходимо соответствующим образом обновить NORTHWNDConnectionString
значение. Web.config
Откройте файл на веб-сайте и измените NORTHWNDConnectionString
значение, чтобы строка подключения считывал: Data Source=localhost\SQLExpress;Initial Catalog=Northwind;Integrated Security=True
После этого изменения раздел <connectionStrings>
должен Web.config
выглядеть следующим образом:
<connectionStrings>
<add name="NORTHWNDConnectionString" connectionString=
"Data Source=localhost\SQLExpress;Initial Catalog=Northwind;
Integrated Security=True;Pooling=false"
providerName="System.Data.SqlClient" />
</connectionStrings>
Примечание.
Как описано в предыдущем руководстве, при отладке объекта SQL Server из клиентского приложения, например веб-сайта ASP.NET, необходимо отключить пул подключений. Строка подключения, показанный выше, отключает пул подключений ( Pooling=false
). Если вы не планируете отладку управляемых хранимых процедур и определяемых пользователем пользователей с веб-сайта ASP.NET, включите пул подключений.
Шаг 3. Создание управляемой хранимой процедуры
Чтобы добавить управляемую хранимую процедуру в базу данных Northwind, сначала необходимо создать хранимую процедуру в качестве метода в проекте SQL Server. В Обозреватель решений щелкните правой кнопкой мыши ManagedDatabaseConstructs
имя проекта и выберите добавить новый элемент. Откроется диалоговое окно "Добавление нового элемента", в котором перечислены типы объектов управляемой базы данных, которые можно добавить в проект. Как показано на рисунке 8, это включает хранимые процедуры и определяемые пользователем функции, среди прочего.
Начнем с добавления хранимой процедуры, которая просто возвращает все продукты, которые были прекращены. Назовите новый файл GetDiscontinuedProducts.cs
хранимой процедуры.
Рис. 8. Добавление новой хранимой процедуры с именем GetDiscontinuedProducts.cs
(щелкните, чтобы просмотреть изображение полного размера)
Будет создан новый файл класса C# со следующим содержимым:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void GetDiscontinuedProducts()
{
// Put your code here
}
};
Обратите внимание, что хранимая процедура реализуется как static
метод в partial
файле класса с именем StoredProcedures
. Кроме того, GetDiscontinuedProducts
метод украшен атрибутом, который помечает SqlProcedure attribute
метод как хранимую процедуру.
Следующий код создает SqlCommand
объект и задает запрос CommandText
SELECT
, возвращающий все столбцы из Products
таблицы для продуктов, поле которых Discontinued
равно 1. Затем он выполняет команду и отправляет результаты обратно в клиентское приложение. Добавьте этот код в GetDiscontinuedProducts
метод.
// Create the command
SqlCommand myCommand = new SqlCommand();
myCommand.CommandText =
@"SELECT ProductID, ProductName, SupplierID, CategoryID,
QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder,
ReorderLevel, Discontinued
FROM Products
WHERE Discontinued = 1";
// Execute the command and send back the results
SqlContext.Pipe.ExecuteAndSend(myCommand);
Все управляемые объекты базы данных имеют доступ к SqlContext
объекту , представляющего контекст вызывающего объекта. Предоставляет SqlContext
доступ к объекту SqlPipe
через его Pipe
свойство. Этот SqlPipe
объект используется для перенаправки сведений между базой данных SQL Server и вызывающим приложением. Как подразумевает его имя, ExecuteAndSend
метод выполняет переданный SqlCommand
объект и отправляет результаты обратно в клиентское приложение.
Примечание.
Объекты управляемой базы данных лучше всего подходят для хранимых процедур и определяемых пользователем функций, использующих процедурную логику, а не логику на основе набора. Процедурная логика включает работу с наборами данных на основе строк или работы с скалярными данными. Однако GetDiscontinuedProducts
созданный метод не включает в себя процедурную логику. Поэтому в идеале она будет реализована как хранимая процедура T-SQL. Он реализуется как управляемая хранимая процедура, чтобы продемонстрировать шаги, необходимые для создания и развертывания управляемых хранимых процедур.
Шаг 4. Развертывание управляемой хранимой процедуры
После завершения этого кода мы готовы развернуть его в базе данных Northwind. Развертывание проекта SQL Server компилирует код в сборку, регистрирует сборку в базе данных и создает соответствующие объекты в базе данных, связывая их с соответствующими методами в сборке. Точный набор задач, выполняемых параметром развертывания, более точно определен на шаге 13. Щелкните правой кнопкой мыши ManagedDatabaseConstructs
имя проекта в Обозреватель решений и выберите параметр "Развернуть". Однако развертывание завершается сбоем со следующей ошибкой: неправильный синтаксис рядом с "EXTERNAL". Возможно, следует установить более высокий уровень совместимости для текущей базы данных, чтобы включить эту функцию. См. справку по хранимой процедуре sp_dbcmptlevel
.
Это сообщение об ошибке возникает при попытке зарегистрировать сборку в базе данных Northwind. Чтобы зарегистрировать сборку в базе данных SQL Server 2005, уровень совместимости базы данных должен иметь значение 90. По умолчанию новые базы данных SQL Server 2005 имеют уровень совместимости 90. Однако базы данных, созданные с помощью Microsoft SQL Server 2000, имеют уровень совместимости по умолчанию 80. Так как база данных Northwind изначально была базой данных Microsoft SQL Server 2000, уровень совместимости в настоящее время имеет значение 80, поэтому необходимо увеличить до 90, чтобы зарегистрировать управляемые объекты базы данных.
Чтобы обновить уровень совместимости базы данных, откройте окно "Создать запрос" в Management Studio и введите следующее:
exec sp_dbcmptlevel 'Northwind', 90
Щелкните значок "Выполнить" на панели инструментов, чтобы запустить приведенный выше запрос.
Рис. 9. Обновление уровня совместимости базы данных Northwind (щелкните, чтобы просмотреть изображение полного размера)
После обновления уровня совместимости повторно разверните проект SQL Server. На этот раз развертывание должно завершиться без ошибок.
Вернитесь в SQL Server Management Studio, щелкните правой кнопкой мыши базу данных Northwind в обозреватель объектов и нажмите кнопку "Обновить". Затем разверните папку Programmability и разверните папку Сборок. Как показано на рисунке 10, база данных Northwind теперь включает сборку, созданную проектом ManagedDatabaseConstructs
.
Рис. 10. Сборка ManagedDatabaseConstructs
теперь зарегистрирована в базе данных Northwind
Также разверните папку хранимых процедур. Там вы увидите хранимую процедуру с именем GetDiscontinuedProducts
. Эта хранимая процедура была создана процессом развертывания и указывает на GetDiscontinuedProducts
метод в сборке ManagedDatabaseConstructs
. GetDiscontinuedProducts
При выполнении хранимой процедуры он, в свою очередь, выполняет GetDiscontinuedProducts
метод. Так как это управляемая хранимая процедура, ее нельзя изменить с помощью Management Studio (поэтому значок блокировки рядом с именем хранимой процедуры).
Рис. 11. Хранимая GetDiscontinuedProducts
процедура указана в папке хранимых процедур
Перед вызовом управляемой хранимой процедуры необходимо преодолеть еще один барьер: база данных настроена для предотвращения выполнения управляемого кода. Проверьте это, открыв новое окно запроса и выполнив хранимую процедуру GetDiscontinuedProducts
. Вы получите следующее сообщение об ошибке: выполнение пользовательского кода в платформа .NET Framework отключено. Включите параметр конфигурации с включенным параметром clr.
Чтобы проверить сведения о конфигурации базы данных Northwind, введите и выполните команду exec sp_configure
в окне запроса. В этом примере показано, что параметр clr включен в настоящее время имеет значение 0.
Рис. 12. Параметр clr включен в настоящее время имеет значение 0 (щелкните, чтобы просмотреть изображение полного размера)
Обратите внимание, что каждый параметр конфигурации на рис. 12 содержит четыре значения: минимальные и максимальные значения, а также значения конфигурации и запуска. Чтобы обновить значение конфигурации для параметра clr включено, выполните следующую команду:
exec sp_configure 'clr enabled', 1
Если повторно запустить exec sp_configure
инструкцию, описанную выше, обновите значение конфигурации параметра clr до 1, но значение выполнения по-прежнему равно 0. Чтобы изменить эту конфигурацию, необходимо выполнить RECONFIGURE
команду, которая установит значение запуска для текущего значения конфигурации. Просто введите RECONFIGURE
в окно запроса и щелкните значок "Выполнить" на панели инструментов. Если вы запускаете exec sp_configure
сейчас, вы увидите значение 1 для параметра конфигурации и запуска среды clr.
После завершения конфигурации с поддержкой clr мы готовы выполнить управляемую хранимую GetDiscontinuedProducts
процедуру. В окне запроса введите и выполните команду exec
GetDiscontinuedProducts
. Вызов хранимой процедуры приводит к выполнению соответствующего управляемого кода в методе GetDiscontinuedProducts
. Этот код выдает SELECT
запрос для возврата всех продуктов, которые прекращены и возвращают эти данные вызывающей приложению, которое является SQL Server Management Studio в этом экземпляре. Management Studio получает эти результаты и отображает их в окне результатов.
Рис. 13. Хранимая GetDiscontinuedProducts
процедура возвращает все прекращенные продукты (щелкните, чтобы просмотреть изображение полного размера)
Шаг 5. Создание управляемых хранимых процедур, которые принимают входные параметры
Многие созданные в рамках этих учебников запросы и хранимые процедуры используют параметры. Например, в руководстве по созданию хранимых процедур для typed DataSet s TableAdapters мы создали хранимую процедуру с именем GetProductsByCategoryID
, которая приняла входной параметр с именем @CategoryID
. Затем хранимая процедура вернула все продукты, поле которых CategoryID
соответствовало значению предоставленного @CategoryID
параметра.
Чтобы создать управляемую хранимую процедуру, принимающую входные параметры, просто укажите эти параметры в определении метода. Чтобы проиллюстрировать это, давайте добавим в проект GetProductsWithPriceLessThan
еще одну управляемую хранимую процедуруManagedDatabaseConstructs
. Эта управляемая хранимая процедура принимает входной параметр, указывающий цену, и возвращает все продукты, поле которых UnitPrice
меньше значения параметра.
Чтобы добавить в проект новую хранимую процедуру, щелкните правой кнопкой мыши ManagedDatabaseConstructs
имя проекта и выберите новую хранимую процедуру. Назовите файл GetProductsWithPriceLessThan.cs
. Как мы видели на шаге 3, это создаст новый файл класса C# с методом с именем, помещенным GetProductsWithPriceLessThan
в partial
класс StoredProcedures
.
GetProductsWithPriceLessThan
Обновите определение метода, чтобы он принял входной SqlMoney
параметр с именем price
и написать код для выполнения и возврата результатов запроса:
[Microsoft.SqlServer.Server.SqlProcedure]
public static void GetProductsWithPriceLessThan(SqlMoney price)
{
// Create the command
SqlCommand myCommand = new SqlCommand();
myCommand.CommandText =
@"SELECT ProductID, ProductName, SupplierID, CategoryID,
QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder,
ReorderLevel, Discontinued
FROM Products
WHERE UnitPrice < @MaxPrice";
myCommand.Parameters.AddWithValue("@MaxPrice", price);
// Execute the command and send back the results
SqlContext.Pipe.ExecuteAndSend(myCommand);
}
Определение GetProductsWithPriceLessThan
и код метода тесно похожи на определение и код метода, созданного GetDiscontinuedProducts
на шаге 3. Единственное различие заключается в том, что GetProductsWithPriceLessThan
метод принимает в качестве входного параметра (), SqlCommand
запрос включает параметр (@MaxPrice
price
), а параметр добавляется в SqlCommand
коллекцию s Parameters
и назначается значение переменнойprice
.
После добавления этого кода повторно разверните проект SQL Server. Затем вернитесь в SQL Server Management Studio и обновите папку хранимых процедур. Вы увидите новую запись. GetProductsWithPriceLessThan
В окне запроса введите и выполните команду exec GetProductsWithPriceLessThan 25
, которая будет перечислять все продукты менее $ 25, как показано на рисунке 14.
Рис. 14. Отображаются продукты в размере $25 (щелкните, чтобы просмотреть изображение полного размера)
Шаг 6. Вызов управляемой хранимой процедуры из уровня доступа к данным
На этом этапе мы добавили GetDiscontinuedProducts
и GetProductsWithPriceLessThan
управляемые хранимые процедуры в ManagedDatabaseConstructs
проект и зарегистрировали их в базе данных SQL Server Northwind. Мы также вызвали эти управляемые хранимые процедуры из SQL Server Management Studio (см. рис. 13 и 14). Для использования этих управляемых хранимых процедур приложением ASP.NET необходимо добавить их в уровни доступа к данным и бизнес-логике в архитектуре. На этом шаге мы добавим два новых метода ProductsTableAdapter
в NorthwindWithSprocs
типизированном наборе данных, который изначально был создан в руководстве по созданию новых хранимых процедур для типизированного набора данных таблицыAdapters . На шаге 7 мы добавим соответствующие методы в BLL.
Откройте типизированный NorthwindWithSprocs
набор данных в Visual Studio и начните с добавления нового метода в ProductsTableAdapter
именованный GetDiscontinuedProducts
набор данных. Чтобы добавить новый метод в TableAdapter, щелкните правой кнопкой мыши имя TableAdapter в конструкторе и выберите параметр "Добавить запрос" в контекстном меню.
Примечание.
Так как мы переместили базу данных Northwind из App_Data
папки в экземпляр базы данных SQL Server 2005 Express Edition, необходимо обновить соответствующую строка подключения в Web.config, чтобы отразить это изменение. На шаге 2 мы обсудили обновление NORTHWNDConnectionString
значения в Web.config
. Если вы забыли сделать это обновление, появится сообщение об ошибке, которое не удалось добавить запрос. Не удалось найти соединение NORTHWNDConnectionString
для объекта Web.config
в диалоговом окне при попытке добавить новый метод в TableAdapter. Чтобы устранить эту ошибку, нажмите кнопку "ОК", а затем перейдите Web.config
и обновите NORTHWNDConnectionString
значение, как описано на шаге 2. Затем попробуйте повторно добавить метод в TableAdapter. На этот раз он должен работать без ошибок.
Добавление нового метода запускает мастер настройки запросов TableAdapter, который мы использовали много раз в прошлых руководствах. Первый шаг просит указать, как TableAdapter должен получить доступ к базе данных: с помощью нерегламентированной инструкции SQL или с помощью новой или существующей хранимой процедуры. Так как мы уже создали и зарегистрировали управляемую GetDiscontinuedProducts
хранимую процедуру в базе данных, выберите параметр "Использовать существующую хранимую процедуру" и нажмите кнопку "Далее".
Рис. 15. Выберите параметр "Использовать существующую хранимую процедуру" (щелкните, чтобы просмотреть изображение полного размера)
На следующем экране появится запрос на хранимую процедуру, которую вызывает метод. Выберите управляемую GetDiscontinuedProducts
хранимую процедуру из раскрывающегося списка и нажмите кнопку "Далее".
Рис. 16. Выберите управляемую GetDiscontinuedProducts
хранимую процедуру (щелкните, чтобы просмотреть изображение полного размера)
Затем мы просим указать, возвращает ли хранимая процедура строки, одно значение или ничего. Так как GetDiscontinuedProducts
возвращает набор строк прекращенных продуктов, выберите первый вариант (табличные данные) и нажмите кнопку "Далее".
Рис. 17. Выберите параметр табличных данных (щелкните, чтобы просмотреть изображение полного размера)
На последнем экране мастера можно указать используемые шаблоны доступа к данным и имена результирующего метода. Оставьте флажки флажки и назовите методы FillByDiscontinued
и GetDiscontinuedProducts
. Чтобы завершить работу мастера, нажмите кнопку Готово .
Рис. 18. Назовите методы FillByDiscontinued
и GetDiscontinuedProducts
(щелкните, чтобы просмотреть изображение полного размера)
Повторите эти действия, чтобы создать методы с именем FillByPriceLessThan
и GetProductsWithPriceLessThan
в ProductsTableAdapter
управляемой хранимой процедуре GetProductsWithPriceLessThan
.
На рисунке 19 показан снимок экрана конструктора наборов данных после добавления методов в ProductsTableAdapter
GetDiscontinuedProducts
хранимые процедуры и GetProductsWithPriceLessThan
управляемые процедуры.
Рис. 19. Включает ProductsTableAdapter
новые методы, добавленные на этом шаге (щелкните, чтобы просмотреть изображение полного размера)
Шаг 7. Добавление соответствующих методов на уровень бизнес-логики
Теперь, когда мы обновили уровень доступа к данным, чтобы включить методы для вызова управляемых хранимых процедур, добавленных на шаге 4 и 5, необходимо добавить соответствующие методы в уровень бизнес-логики. Добавьте в класс следующие два метода ProductsBLLWithSprocs
:
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Select, false)]
public NorthwindWithSprocs.ProductsDataTable GetDiscontinuedProducts()
{
return Adapter.GetDiscontinuedProducts();
}
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Select, false)]
public NorthwindWithSprocs.ProductsDataTable
GetProductsWithPriceLessThan(decimal priceLessThan)
{
return Adapter.GetProductsWithPriceLessThan(priceLessThan);
}
Оба метода просто вызывают соответствующий метод DAL и возвращают ProductsDataTable
экземпляр. Разметка DataObjectMethodAttribute
над каждым методом приводит к тому, что эти методы будут включены в раскрывающийся список на вкладке SELECT мастера настройки источника данных ObjectDataSource.
Шаг 8. Вызов управляемых хранимых процедур из слоя презентации
Благодаря уровням бизнес-логики и доступа к данным, чтобы включить поддержку вызова GetDiscontinuedProducts
и GetProductsWithPriceLessThan
управляемых хранимых процедур, теперь можно отобразить результаты этих хранимых процедур на странице ASP.NET.
ManagedFunctionsAndSprocs.aspx
Откройте страницу в AdvancedDAL
папке и из панели элементов перетащите GridView в конструктор. Задайте для свойства DiscontinuedProducts
GridView ID
значение и из смарт-тега привязать его к новому объекту ObjectDataSource с именем DiscontinuedProductsDataSource
. Настройте ObjectDataSource для извлечения данных из ProductsBLLWithSprocs
метода класса GetDiscontinuedProducts
.
Рис. 20. Настройка ObjectDataSource для использования ProductsBLLWithSprocs
класса (щелкните, чтобы просмотреть изображение полного размера)
Рис. 21. Выберите GetDiscontinuedProducts
метод из раскрывающегося списка на вкладке SELECT (щелкните, чтобы просмотреть изображение полного размера)
Так как эта сетка будет использоваться только для отображения сведений о продукте, задайте раскрывающийся список на вкладках UPDATE, INSERT и DELETE (Нет) и нажмите кнопку "Готово".
После завершения работы мастера Visual Studio автоматически добавит область BoundField или CheckBoxField для каждого поля данных в списке ProductsDataTable
. Чтобы удалить все эти поля, кроме ProductName
и Discontinued
, в какой момент декларативная разметка GridView и ObjectDataSource должны выглядеть примерно так:
<asp:GridView ID="DiscontinuedProducts" runat="server"
AutoGenerateColumns="False" DataKeyNames="ProductID"
DataSourceID="DiscontinuedProductsDataSource">
<Columns>
<asp:BoundField DataField="ProductName" HeaderText="ProductName"
SortExpression="ProductName" />
<asp:CheckBoxField DataField="Discontinued"
HeaderText="Discontinued"
SortExpression="Discontinued" />
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="DiscontinuedProductsDataSource" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetDiscontinuedProducts" TypeName="ProductsBLLWithSprocs">
</asp:ObjectDataSource>
Просмотрите эту страницу через браузер. При посещении страницы ОбъектDataSource вызывает ProductsBLLWithSprocs
метод класса GetDiscontinuedProducts
. Как мы видели на шаге 7, этот метод вызывает метод класса GetDiscontinuedProducts
DALProductsDataTable
, который вызывает GetDiscontinuedProducts
хранимую процедуру. Эта хранимая процедура является управляемой хранимой процедурой и выполняет код, созданный на шаге 3, возвращая прекращенные продукты.
Результаты, возвращаемые управляемой хранимой процедурой, упаковываются в DAL, а затем возвращаются в ProductsDataTable
BLL, который затем возвращает их на уровень презентации, где они привязаны к GridView и отображаются. Как ожидается, сетка перечисляет те продукты, которые были прекращены.
Рис. 22. Список прекращенных продуктов (щелкните, чтобы просмотреть изображение полного размера)
Для дальнейшего использования добавьте textBox и другой GridView на страницу. В этом GridView отображаются продукты меньше, чем сумма, введенная в TextBox, путем вызова ProductsBLLWithSprocs
метода класса GetProductsWithPriceLessThan
.
Шаг 9. Создание и вызов пользовательских файлов T-SQL
Определяемые пользователем функции или определяемые пользователем функции — это объекты базы данных, которые тесно имитируют семантику функций на языках программирования. Как и функция в C#, определяемые пользователем функции могут включать переменное число входных параметров и возвращать значение определенного типа. UDF может возвращать скалярные данные — строку, целое число и т. д. — или табличные данные. Давайте рассмотрим оба типа определяемых пользователем типов, начиная с UDF, который возвращает скалярный тип данных.
Следующий UDF вычисляет предполагаемое значение инвентаризации для определенного продукта. Это делается путем приема трех входных параметров — UnitPrice
UnitsInStock
и Discontinued
значений для конкретного продукта — и возвращает значение типаmoney
. Он вычисляет предполагаемое значение инвентаризации путем умножения UnitPrice
на UnitsInStock
него. Для прекращенных элементов это значение сокращается.
CREATE FUNCTION udf_ComputeInventoryValue
(
@UnitPrice money,
@UnitsInStock smallint,
@Discontinued bit
)
RETURNS money
AS
BEGIN
DECLARE @Value decimal
SET @Value = ISNULL(@UnitPrice, 0) * ISNULL(@UnitsInStock, 0)
IF @Discontinued = 1
SET @Value = @Value * 0.5
RETURN @Value
END
После добавления UDF в базу данных его можно найти в Management Studio, разверив папку Programmability, а затем Функции и скалярные функции. Его можно использовать в запросе SELECT
следующим образом:
SELECT ProductID, ProductName, dbo.udf_ComputeInventoryValue
(UnitPrice, UnitsInStock, Discontinued) as InventoryValue
FROM Products
ORDER BY InventoryValue DESC
Я добавил UDF в udf_ComputeInventoryValue
базу данных Northwind; На рисунке 23 показаны выходные данные приведенного выше SELECT
запроса при просмотре с помощью Management Studio. Кроме того, обратите внимание, что UDF указан в папке Scalar-value Functions в обозреватель объектов.
Рис. 23. Список значений инвентаризации каждого продукта (щелкните, чтобы просмотреть изображение полного размера)
Определяемые пользователем функции также могут возвращать табличные данные. Например, мы можем создать UDF, который возвращает продукты, принадлежащие определенной категории:
CREATE FUNCTION dbo.udf_GetProductsByCategoryID
(
@CategoryID int
)
RETURNS TABLE
AS
RETURN
(
SELECT ProductID, ProductName, SupplierID, CategoryID,
QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder,
ReorderLevel, Discontinued
FROM Products
WHERE CategoryID = @CategoryID
)
UDF udf_GetProductsByCategoryID
принимает входной @CategoryID
параметр и возвращает результаты указанного SELECT
запроса. После создания этот UDF можно ссылаться в FROM
предложении SELECT
(илиJOIN
) запроса. В следующем примере возвращаются ProductID
ProductName
значения и CategoryID
значения для каждого из напитков.
SELECT ProductID, ProductName, CategoryID
FROM dbo.udf_GetProductsByCategoryID(1)
Я добавил UDF в udf_GetProductsByCategoryID
базу данных Northwind; На рисунке 24 показаны выходные данные приведенного выше SELECT
запроса при просмотре с помощью Management Studio. Определяемые пользователем функции, возвращающие табличные данные, можно найти в папке функций табличного значения обозреватель объектов.
Рис. 24. ProductID
CategoryID
ProductName
Список и список для каждого напитка (щелкните, чтобы просмотреть изображение полного размера)
Примечание.
Дополнительные сведения о создании и использовании определяемых пользователем функций см . в разделе "Введение в определяемые пользователем функции". Также ознакомьтесь с преимуществами и недостатками определяемых пользователем функций.
Шаг 10. Создание управляемой UDF
udf_GetProductsByCategoryID
Объекты udf_ComputeInventoryValue
базы данных T-SQL, созданные в приведенных выше примерах, представляют собой объекты базы данных T-SQL. SQL Server 2005 также поддерживает управляемые определяемые пользователем функции, которые можно добавить в ManagedDatabaseConstructs
проект так же, как управляемые хранимые процедуры из шагов 3 и 5. Для этого шага давайте реализуем udf_ComputeInventoryValue
UDF в управляемом коде.
Чтобы добавить управляемый UDF в ManagedDatabaseConstructs
проект, щелкните правой кнопкой мыши имя проекта в Обозреватель решений и выберите команду "Добавить новый элемент". Выберите определяемый пользователем шаблон в диалоговом окне "Добавление нового элемента" и назовите новый UDF-файл udf_ComputeInventoryValue_Managed.cs
.
Рис. 25. Добавление нового управляемого UDF в ManagedDatabaseConstructs
проект (щелкните, чтобы просмотреть изображение полного размера)
Шаблон определяемой пользователем функции создает partial
класс с именем UserDefinedFunctions
метода, имя которого совпадает с именем файла класса (udf_ComputeInventoryValue_Managed
в этом экземпляре). Этот метод украшен атрибутом, который помечает метод как SqlFunction
управляемый UDF.
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString udf_ComputeInventoryValue_Managed()
{
// Put your code here
return new SqlString("Hello");
}
};
В udf_ComputeInventoryValue
настоящее время метод возвращает SqlString
объект и не принимает входные параметры. Необходимо обновить определение метода, чтобы он принял три входных параметра — UnitPrice
UnitsInStock
и — и Discontinued
возвращает SqlMoney
объект. Логика вычисления значения инвентаризации идентична этой логике в UDF T-SQL udf_ComputeInventoryValue
.
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlMoney udf_ComputeInventoryValue_Managed
(SqlMoney UnitPrice, SqlInt16 UnitsInStock, SqlBoolean Discontinued)
{
SqlMoney inventoryValue = 0;
if (!UnitPrice.IsNull && !UnitsInStock.IsNull)
{
inventoryValue = UnitPrice * UnitsInStock;
if (Discontinued == true)
inventoryValue = inventoryValue * new SqlMoney(0.5);
}
return inventoryValue;
}
Обратите внимание, что входные параметры метода UDF имеют соответствующие типы SQL: SqlMoney
для поля, SqlInt16
для UnitPrice
UnitsInStock
и SqlBoolean
для Discontinued
. Эти типы данных отражают типы, определенные в Products
таблице: UnitPrice
столбец имеет тип money
, UnitsInStock
столбец типа smallint
и Discontinued
столбец типа bit
.
Код начинается с создания экземпляра SqlMoney
с именем inventoryValue
, которому присваивается значение 0. Таблица Products
позволяет использовать значения базы данных NULL
в UnitsInPrice
столбцах и UnitsInStock
столбцах. Поэтому сначала необходимо проверить, содержат NULL
ли эти значения с помощью SqlMoney
свойства объектаIsNull
. Если оба UnitPrice
значения и UnitsInStock
не содержатNULL
значения, мы вычисляем inventoryValue
, чтобы быть продуктом двух. Затем, если Discontinued
задано значение true, то мы сократили значение.
Примечание.
Объект SqlMoney
позволяет умножать только два SqlMoney
экземпляра. Он не позволяет SqlMoney
экземпляру умножаться на число с плавающей запятой. Таким образом, чтобы уменьшить его на inventoryValue
новый SqlMoney
экземпляр, имеющий значение 0,5.
Шаг 11. Развертывание управляемой UDF
Теперь, когда создан управляемый UDF, мы готовы развернуть его в базе данных Northwind. Как мы видели на шаге 4, управляемые объекты в проекте SQL Server развертываются, щелкнув правой кнопкой мыши имя проекта в Обозреватель решений и выбрав параметр "Развернуть" в контекстном меню.
После развертывания проекта вернитесь в SQL Server Management Studio и обновите папку Scalar-valued Functions. Теперь вы увидите две записи:
dbo.udf_ComputeInventoryValue
— UDF T-SQL, созданный на шаге 9, иdbo.udf ComputeInventoryValue_Managed
— управляемый UDF, созданный на шаге 10, который был только что развернут.
Чтобы протестировать этот управляемый UDF, выполните следующий запрос из Среды Management Studio:
SELECT ProductID, ProductName,
dbo.udf_ComputeInventoryValue_Managed(
UnitPrice,
UnitsInStock,
Discontinued
) as InventoryValue
FROM Products
ORDER BY InventoryValue DESC
Эта команда использует управляемый udf ComputeInventoryValue_Managed
UDF вместо UDF T-SQL udf_ComputeInventoryValue
, но выходные данные совпадают. Вернитесь на рис. 23, чтобы просмотреть снимок экрана выходных данных UDF.
Шаг 12. Отладка объектов управляемой базы данных
В руководстве по отладке хранимых процедур мы обсудили три варианта отладки SQL Server с помощью Visual Studio: Прямая отладка базы данных, отладка приложений и отладка из проекта SQL Server. Управляемые объекты базы данных нельзя отлаживать с помощью прямой отладки базы данных, но их можно отлаживать из клиентского приложения и непосредственно из проекта SQL Server. Однако для отладки база данных SQL Server 2005 должна разрешить отладку SQL/CLR. Помните, что когда мы впервые создали ManagedDatabaseConstructs
проект Visual Studio, спросили, хотите ли мы включить отладку SQL/CLR (см. рис. 6 на шаге 2). Этот параметр можно изменить, щелкнув правой кнопкой мыши базу данных в окне обозревателя серверов.
Рис. 26. Убедитесь, что база данных разрешает отладку SQL/CLR
Представьте, что мы хотели отладить управляемую GetProductsWithPriceLessThan
хранимую процедуру. Сначала мы зададим точку останова в коде GetProductsWithPriceLessThan
метода.
Рис. 27. Установка точки останова в методе GetProductsWithPriceLessThan
(щелкните, чтобы просмотреть изображение полного размера)
Сначала рассмотрим отладку объектов управляемой базы данных из проекта SQL Server. Так как наше решение включает два проекта — ManagedDatabaseConstructs
проект SQL Server вместе с нашим веб-сайтом— для отладки из проекта SQL Server необходимо указать Visual Studio запустить ManagedDatabaseConstructs
проект SQL Server при запуске отладки. Щелкните проект правой кнопкой мыши ManagedDatabaseConstructs
в Обозреватель решений и выберите параметр Set as StartUp Project в контекстном меню.
ManagedDatabaseConstructs
Когда проект запускается из отладчика, он выполняет инструкции SQL в Test.sql
файле, который находится в папкеTest Scripts
. Например, чтобы проверить GetProductsWithPriceLessThan
управляемую хранимую процедуру, замените существующее Test.sql
содержимое файла следующим оператором, который вызывает GetProductsWithPriceLessThan
управляемую хранимую процедуру, передавающую @CategoryID
значение 14.95:
exec GetProductsWithPriceLessThan 14.95
После ввода приведенного выше скрипта Test.sql
начните отладку, перейдя в меню отладки и выбрав "Начать отладку" или нажав клавишу F5 или зеленый значок воспроизведения на панели инструментов. При этом будут создаваться проекты в решении, развертывать управляемые объекты базы данных в базе данных Northwind, а затем выполнять Test.sql
скрипт. На этом этапе точка останова будет достигнута, и мы можем выполнить шаги по методу GetProductsWithPriceLessThan
, проверить значения входных параметров и т. д.
Рис. 28. Точка останова в методе GetProductsWithPriceLessThan
была достигнута (щелкните, чтобы просмотреть изображение полного размера)
Чтобы объект базы данных SQL был отлажен с помощью клиентского приложения, необходимо настроить базу данных для поддержки отладки приложений. Щелкните правой кнопкой мыши базу данных в обозревателе серверов и убедитесь, что установлен флажок отладки приложений. Кроме того, необходимо настроить приложение ASP.NET для интеграции с отладчиком SQL и отключить пул подключений. Эти шаги подробно описаны на шаге 2 руководства по отладке хранимых процедур .
После настройки приложения и базы данных ASP.NET задайте веб-сайт ASP.NET в качестве запускаемого проекта и запустите отладку. Если вы посещаете страницу, которая вызывает один из управляемых объектов с точкой останова, приложение будет остановлено и управление будет передано отладчику, где можно выполнить шаг по коду, как показано на рис. 28.
Шаг 13. Компиляция и развертывание объектов управляемой базы данных вручную
Проекты SQL Server упрощают создание, компиляцию и развертывание объектов управляемой базы данных. К сожалению, проекты SQL Server доступны только в выпусках Professional и Team Systems Visual Studio. Если вы используете Visual Web Developer или выпуск Standard Visual Studio и хотите использовать управляемые объекты базы данных, вам потребуется вручную создать и развернуть их. Это включает четыре шага.
- Создайте файл, содержащий исходный код для объекта управляемой базы данных,
- Компиляция объекта в сборку,
- Зарегистрируйте сборку в базе данных SQL Server 2005 и
- Создайте объект базы данных в SQL Server, указывающий на соответствующий метод в сборке.
Чтобы проиллюстрировать эти задачи, давайте создадим новую управляемую хранимую процедуру, которая возвращает эти продукты UnitPrice
, которые больше указанного значения. Создайте новый файл на компьютере с именем GetProductsWithPriceGreaterThan.cs
и введите следующий код в файл (для этого можно использовать Visual Studio, Блокнот или любой текстовый редактор):
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void GetProductsWithPriceGreaterThan(SqlMoney price)
{
// Create the command
SqlCommand myCommand = new SqlCommand();
myCommand.CommandText =
@"SELECT ProductID, ProductName, SupplierID, CategoryID,
QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder,
ReorderLevel, Discontinued
FROM Products
WHERE UnitPrice > @MinPrice";
myCommand.Parameters.AddWithValue("@MinPrice", price);
// Execute the command and send back the results
SqlContext.Pipe.ExecuteAndSend(myCommand);
}
};
Этот код почти идентичен методу, созданному GetProductsWithPriceLessThan
на шаге 5. Единственными отличиями являются имена методов, WHERE
предложение и имя параметра, используемое в запросе. Обратно в методе GetProductsWithPriceLessThan
WHERE
предложение считывает: WHERE UnitPrice < @MaxPrice
Здесь, в GetProductsWithPriceGreaterThan
, мы используем: WHERE UnitPrice > @MinPrice
Теперь необходимо скомпилировать этот класс в сборку. В командной строке перейдите в каталог, в котором сохранен GetProductsWithPriceGreaterThan.cs
файл, и используйте компилятор C# (csc.exe
) для компиляции файла класса в сборку:
csc.exe /t:library /out:ManuallyCreatedDBObjects.dll GetProductsWithPriceGreaterThan.cs
Если папка, csc.exe
содержащаяся не в системе PATH
, вам придется полностью ссылаться на его путь, %WINDOWS%\Microsoft.NET\Framework\version\
например:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:library /out:ManuallyCreatedDBObjects.dll GetProductsWithPriceGreaterThan.cs
Рис. 29. Компиляция GetProductsWithPriceGreaterThan.cs
в сборку (щелкните, чтобы просмотреть изображение полного размера)
Флаг /t
указывает, что файл класса C# должен быть скомпилирован в библиотеку DLL (а не исполняемый файл). Флаг /out
указывает имя результирующей сборки.
Примечание.
Вместо компиляции GetProductsWithPriceGreaterThan.cs
файла класса из командной строки можно также использовать Visual C# Express Edition или создать отдельный проект библиотеки классов в Visual Studio выпуск Standard. S ren Jacob Lauritsen доброжелательно предоставил такой проект Visual C# Express Edition с кодом для GetProductsWithPriceGreaterThan
хранимой процедуры и двумя управляемыми хранимыми процедурами и UDF, созданными в шагах 3, 5 и 10. Проект S ren также включает команды T-SQL, необходимые для добавления соответствующих объектов базы данных.
С помощью кода, скомпилированного в сборку, мы готовы зарегистрировать сборку в базе данных SQL Server 2005. Это можно выполнить с помощью T-SQL, с помощью команды CREATE ASSEMBLY
или с помощью СРЕДЫ SQL Server Management Studio. Давайте сосредоточимся на использовании Management Studio.
В Management Studio разверните папку Programmability в базе данных Northwind. Одна из ее вложенных папок — сборки. Чтобы вручную добавить новую сборку в базу данных, щелкните правой кнопкой мыши папку "Сборки" и выберите "Создать сборку" в контекстном меню. Откроется диалоговое окно "Новая сборка" (см. рис. 30). Нажмите кнопку "Обзор", выберите ManuallyCreatedDBObjects.dll
только что скомпилированную сборку и нажмите кнопку "ОК", чтобы добавить сборку в базу данных. Сборка ManuallyCreatedDBObjects.dll
не должна отображаться в обозреватель объектов.
Рис. 30. Добавление сборки в ManuallyCreatedDBObjects.dll
базу данных (щелкните, чтобы просмотреть изображение полного размера)
Рис. 31. Список ManuallyCreatedDBObjects.dll
в обозреватель объектов
Хотя мы добавили сборку в базу данных Northwind, мы еще не связали хранимую процедуру с GetProductsWithPriceGreaterThan
методом в сборке. Для этого откройте новое окно запроса и выполните следующий скрипт:
CREATE PROCEDURE [dbo].[GetProductsWithPriceGreaterThan]
(
@price money
)
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [ManuallyCreatedDBObjects].[StoredProcedures].[GetProductsWithPriceGreaterThan]
GO
При этом создается новая хранимая процедура в базе данных Northwind с именем GetProductsWithPriceGreaterThan
и связывает ее с управляемым методом GetProductsWithPriceGreaterThan
(который находится в классе StoredProcedures
, который находится в сборке ManuallyCreatedDBObjects
).
После выполнения приведенного выше скрипта обновите папку хранимых процедур в обозреватель объектов. Вы увидите новую запись хранимой процедуры , GetProductsWithPriceGreaterThan
которая имеет значок блокировки рядом с ним. Чтобы проверить эту хранимую процедуру, введите и выполните следующий скрипт в окне запроса:
exec GetProductsWithPriceGreaterThan 24.95
Как показано на рисунке 32, в приведенной выше команде отображаются сведения об этих продуктах с UnitPrice
более чем $24,95.
Рис. 32. Список ManuallyCreatedDBObjects.dll
в обозреватель объектов (щелкните, чтобы просмотреть изображение полного размера)
Итоги
Microsoft SQL Server 2005 обеспечивает интеграцию со средой CLR, которая позволяет создавать объекты базы данных с помощью управляемого кода. Ранее эти объекты базы данных можно создавать только с помощью T-SQL, но теперь мы можем создать эти объекты с помощью языков программирования .NET, таких как C#. В этом руководстве мы создали две управляемые хранимые процедуры и управляемую определяемую пользователем функцию.
Тип проекта SQL Server Visual Studio упрощает создание, компиляцию и развертывание объектов управляемой базы данных. Кроме того, она предлагает многофункциональную поддержку отладки. Однако типы проектов SQL Server доступны только в выпусках Professional и Team Systems Visual Studio. Для тех, кто использует Visual Web Developer или выпуск Standard Visual Studio, действия по созданию, компиляции и развертыванию должны выполняться вручную, как показано на шаге 13.
Счастливое программирование!
Дополнительные материалы
Дополнительные сведения о разделах, описанных в этом руководстве, см. в следующих ресурсах:
- Преимущества и недостатки определяемых пользователем функций
- Создание объектов SQL Server 2005 в управляемом коде
- Практическое руководство. Создание и запуск хранимой процедуры СРЕДЫ CLR SQL Server
- Практическое руководство. Создание и запуск определяемой пользователем функции SQLR SQLR
- Практическое руководство. Изменение скрипта
Test.sql
для запуска объектов SQL - Введение в определяемые пользователем функции
- Управляемый код и SQL Server 2005 (видео)
- Справочник по Transact-SQL
- Пошаговое руководство. Создание хранимой процедуры в управляемом коде
Об авторе
Скотт Митчелл, автор семи книг ASP/ASP.NET и основатель 4GuysFromRolla.com, работает с технологиями Microsoft Web с 1998 года. Скотт работает независимым консультантом, тренером и писателем. Его последняя книга Сэмс Учит себя ASP.NET 2.0 в 24 часах. Он может быть достигнут в mitchell@4GuysFromRolla.com. или через его блог, который можно найти на http://ScottOnWriting.NET.
Особое спасибо
Эта серия учебников была проверена многими полезными рецензентами. Ведущий рецензент для этого руководства был S ren Джейкоб Лоритсен. Помимо просмотра этой статьи, S ren также создал проект Visual C# Express Edition, включенный в эту статью, для компиляции объектов управляемой базы данных вручную. Хотите просмотреть мои предстоящие статьи MSDN? Если да, упадите меня линию в mitchell@4GuysFromRolla.com.