|
Программирование >> Программирование баз данных
Объявление сложных типов данных. Осуществление внешних вызовов (и в связи с этим решение некоторых вопросов обеспечения безопасности). Тема, касающаяся инфраструктуры .NET, является очень широкой, затрагивает много разных областей, о которых уже шла и будет идти речь в настоящей книге, а также требует во многом гораздо более глубокого изучения, поэтому приступим к делу! Следует отметить, что в нескольких примерах данной главы используется существующий образцовый набор Microsoft Sample. Для доступа к этим образцам необходимо установить примеры сценариев во время инсталляции SQL Server или загрузить SDK разработчика SQL Server .NET. Кроме того, в данной главе широко используется интегрированная среда разработки Visual Studio .NET (а в примерах - версия 2005). Основные сведения о сборках Все новые функциональные возможности .NET осуществляются с использованием такого нового (по крайней мере с точки зрения SQL Server) программного объекта, как сборка. Поэтому в настоящей главе мы должны прежде всего найти исчерпывающий от вет на вопрос о том, что такое сборка. Сборка- это библиотека DLL, созданная с использованием управляемого кода (при этом не имеет значения, какой именно язык .NET для этого применяется). Сборка может быть создана с помощью Visual Studio .NET или какойо другой среды разработки, но в пакете .NET Framework SDK предусмотрен также компилятор с интерфейсом командной строки, которым могут воспользоваться разработчики, не имеющие в своем распоряжении среды разработки Visual Studio. Тем не менее в сборках, используемых в СУБД SQL Server, допустимыми являются не все пользовательские атрибуты или API-интерфейсы инфраструктуры .NET Framework. Для ознакомления с поттым списком допустимых средств можно обратиться к документации Books Online, но, вообще говоря, не разрешены все средства, которые поддерживают работу с окнами, а также средства, обозначенные как небезопасные, UNSAFE, если вы не намереваетесь предоставить применяемой сборке доступ на уровне UNSAFE. Компиляция сборок Для использования сборок .NET требуется разрешить применение общей среды выполнения (Common Language Runtime - CLR) в СУБД SQL Server, что запрещено по умолчанию. Чтобы разрешить применение CLR, необходимо выполнить следующую команду в программе Management Studio: sp configure clr enabled, 1 GO RECONFIGURE В действительности компиляция сборки не требует каких-то особых действий по сравнению с компиляцией обычной библиотеки DLL. Реальную значимость имеют лишь требования по компиляции библиотеки DLL, которая должна служить в качестве сборки .NET в СУБД SQL Server, изложенные ниже. Не допускается создание ссылок на какие-либо другие сборки, которые включают функции, относяш;иеся к работе с окнами (диалоговыми окнами и т.д.). Возможность применения сборки для вьшолнения каких-либо функций в значительной степени зависит от того, как обозначена эта сборка (безопасная, для внешнего доступа, небезопасная). Не считая этих исключений, во всем остальном создание сборок для СУБД SQL Server не намного отличается от создания любых других библиотек DLL, применяемых для доступа к набору классов. После определения состава сборки можно либо откомпилировать проект с использованием среды Visual Studio (если таковая имеется), либо воспользоваться компилятором, который включен в SDK .NET. Приступим к практическим действиям и рассмотрим относительно простой пример сборки, которая будет использоваться в качестве примера хранимой процедуры в одном из следуюш;их разделов настояш;ей главы. Создайте новый проект SQL Server в среде Visual Studio с применением языка С# (при желании, читатель может перевести этот пример на язык VB) и присвойте ему имя ExampleProc. Типы проектов SQL Server можно найти под группой проектов Database . После того как в программе Visual Studio откроется окно, откажитесь от всех полученных приглашений, касаюш;ихся открытия диалоговых окон, которые относятся к экземплярам базы данных, и выберите проект Class Library. Фактически не столь важен тип проекта, с которого вы начнете, как ссылка, с которой начинается этот проект. Иначе говоря, хотя по условиям данного примера мы предлагаем прежде всего открыть проект SQL Server, можно с таким же успехом начать разработку с создания простого проекта класса. Теперь добавьте новую хранимую процедуру, щелкнув правой кнопкой мыши на обозначении проекта и выбрав команду Add=>Stored Procedure... (рис. 14.1). В этой новой хранимой процедуре необходимо задать несколько ссьгяок с учетом того, что программа Visual Studio уже ввела некоторые ссылки от имени пользователя: using System; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; После этого мы можем перейти к написанию некоторого реального кода. Код, который согласно желанию пользователя должен быть помещен в сборку .NET, реализуется с помощью открытого класса, public. Автор решил назвать создаваемый класс StoredProcedures, но можно выбрать любое допустимое имя. После этого мы можем перейти к объявлению метода: public partial class StoredProcedures [Microsoft.SqlServer.Server.SqlProcedure] public static void ExampleSP(out int outval) Add Reference... Add Web Reference-.. Add Test Script Vkw Class Dioam Stored Procedure.., Debug Renanie Properties Aggregate.,. Trigger... User-Definedlype.. Moduie... Puc. 14.1. Вызов команды AddStored Procedure... Метод, подобно классу, объявляется с атрибутом public. При желании, можно было бы также предусмотреть использование классов с атрибутом private (но для них, безусловно, потребовались бы поддерживающие методы, поскольку доступ к таким закрытым классам не предоставляется извне). Тип данных void указывает, что метод не предназначен для получения возвращаемого значения (при вызове такого метода в СУБД SQL Server он всегда будет возвращать по умолчанию значение О (нуль)). Но в коде можно было бы объявить этот метод как возвращающий значение типа int и задавать в коде соответствующее значение (чаще всего в таком случае возвращаемое значение О свидетельствует об отсутствии ошибок, а значение, отличное от нуля, говорит о том, что возникла какая-то ошибка). Заслуживает также внимания директива Microsof t. SqlServer. Server. Sql-Procedure. Она является полностью необязательной и используется инструментальными средствами развертывания Visual Studio для передачи информации о том, что следующий за ней метод представляет собой хранимую процедуру. Автор оставил эту директиву нетронутой в разрабатываемом коде прежде всего для того, чтобы показать, в каком месте происходит ее автоматическая вставка (сами мы намереваемся развертывать эту процедуру вручную, а не использовать функциональные средства развертывания Visual Studio). С этого момента мы готовы захватить ссылку на соединение. Обратите особое внимание на этот фрагмент кода, поскольку он отличается от обычно применяемого в соединениях с базой данных .NET. Во всем остальном, кроме строки соединения, рассматриваемое соединение ничем не отличается от обычного, поскольку в данном случае в строке соединения предусмотрен специальный синтаксис, который указывает, что должно использоваться то же соединение, с помощью которого была вызвана хранимая процедура. Удобство данного подхода состоит в том, что мы можем воспользоваться контекстом успешно зарегистрированной учетной записи и не должны явно предоставлять имя сервера или даже имя пользователя. Выполнение следующего оператора приводит к тому, что в соединении используется текущий контекст соединения, в котором действует / / хранимая процедура. Может быть также создано полностью новое соединение
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |