Исходники.Ру - Программирование
Исходники
Статьи
Книги и учебники
Скрипты
Новости RSS
Магазин программиста

Главная » Статьи по программированию » .NET - Все статьи »

Обсудить на форуме Обсудить на форуме

Построение приложений из готовых блоков



Доступ к данным является существенным компонентом большинства современных приложений. Несмотря на то, что программная модель ADO.NET стала существенно богаче, по сравнению с «классическим» ADO, програмисты по-прежнему решают одни и те же задачи из проекта в проект. Предлагаемый блок Microsoft Data Access Application Block призван упростить некоторые рутинные операции при работе с Microsoft SQL Server и предоставляет в распоряжение разработчиков набор повторно используемых компонентов, выполненных в виде дополнительного пространства имен, подключаемого к приложению.

Часть 1. Microsoft Data Access Application Block

Доступ к данным является существенным компонентом большинства современных приложений. Несмотря на то, что программная модель ADO.NET стала существенно богаче, по сравнению с "классическим" ADO, програмисты по-прежнему решают одни и те же задачи из проекта в проект. Предлагаемый блок Microsoft Data Access Application Block призван упростить некоторые рутинные операции при работе с Microsoft SQL Server и предоставляет в распоряжение разработчиков набор повторно используемых компонентов, выполненных в виде дополнительного пространства имен, подключаемого к приложению. Использование Microsoft Data Access Application Block облегчает следующие задачи:

  • Вызов хранимых процедур и выполнение SQL-запросов
  • Задание параметров запросов
  • Получение объектов SqlDataReader, DataSet и XmlReader

Например, используя Microsoft Data Access Application Block вызов хранимой процедуры и генерация набора данных (DataSet) может быть произведена одним вызовом:

Dim DS As DataSet = SqlHelper.ExecuteDataSet( _
  ConnectionString, _
  CommandType.StoredProcedure, _
  "GetProductsByCategory", _
  new SqlParameter("@CategoryID", CategoryID))

Microsoft Data Access Application Block состоит из следующих основных элементов:

Класс SqlHelper содержит статические методы, позволяющие выполнять различные типы запросов к базе данных Microsoft SQL Server - ExecuteNonQuery, ExecuteDataset, ExecuteReader, ExecuteScalar и ExecuteXmlReader . Класс SqlHelperParameterCache служит для кэширования параметров запросов и используется методами Execute класса SqlHelper. Также методы класса SqlHelperParameterCache - CacheParameterSet, GetCachedParameterSet и GetSpParameterSet могут использоваться из кода приложения для кэширования наборов параметров запросов.

Ниже мы рассмотрим ряд примеров, иллюстирующих использование классов и методов, входящих в состав Microsoft Data Access Application Block.

Выполнение команд с использованием класса SqlHelper

Как мы отметили выше, класс SqlHelper содержит пять статических методов, используемых для выполнения различных запросов:

  • ExecuteNonQuery - используется для выполнения команд, которые не возвращают значений
  • ExecuteDataset - используется для создания объекта DataSet, который будет содержать результаты выполнения команды
  • ExecuteReader - используется для создания объекта SqlDataReader, который будет содержать результаты выполнения команды
  • ExecuteScalar - используется для получения единственного значения, содержащегося в первой колонке первого ряда результирующего набора данных
  • ExecuteXmlReader - используется для получения XML-фрагмента, возвращаемого запросом с ключевым словом FOR XML

Каждый из этих методов содержит перегруженные методы, перечисленные ниже.

Execute* (ByVal connection As SqlConnection, _
          ByVal commandType As CommandType, _
          ByVal CommandText As String)

Execute* (ByVal connection As SqlConnection, _
          ByVal commandType As CommandType, _
          ByVal commandText As String, _
          ByVal ParamArray commandParameters() As SqlParameter)

Execute* (ByVal connection As SqlConnection, _
          ByVal spName As String, _
          ByVal ParamArray parameterValues() As Object)

Execute* (ByVal transaction As SqlTransaction, _
          ByVal commandType As CommandType, _
          ByVal commandText As String)

Execute* (ByVal transaction As SqlTransaction, _
          ByVal commandType As CommandType, _
          ByVal commandText As String, _
          ByVal ParamArray commandParameters() As SqlParameter)

Execute* (ByVal transaction As SqlTransaction, _
          ByVal spName As String, _
          ByVal ParamArray parameterValues() As Object)

Помимо этого, все методы, кроме ExecuteXmlReader имеют перегруженные методы, позволяющие передавать информацию о соединении через строку соединения, а не объект SqlConnection:

Execute* (ByVal connectionString As String, _
          ByVal commandType As CommandType, _
          ByVal commandText As String)

Execute* (ByVal connectionString As String, _
          ByVal commandType As CommandType, _
          ByVal commandText As String, _
          ByVal ParamArray commandParameters() As SqlParameter)

Execute* (ByVal connectionString As String, _
          ByVal spName As String, _
          ByVal ParamArray parameterValues() As Object)

Для обращения к показанным выше методам класса SqlHelper требуется указание сборки Microsoft.ApplicationBlocks.Data:

Imports Microsoft.ApplicationBlocks.Data

...

Dim DS As DataSet = SqlHelper.ExecuteDataSet( _
 "SERVER=(local);DATABASE=Northwind;INTEGRATED SECURITY=True;", _
 CommandType.Text, "SELECT * FROM Productes")

Управление параметрами с помощью класса SqlHelperParameterCache

Класс SqlHelperParameterCache содержит три метода, используемых для управления параметрами запросов:

  • CacheParameterSet - используется для сохранения массива параметров (объектов типа SqlParameter) в кэше
  • GetCachedParameterSet - служит для извлечения копии массива параметров из кэша
  • GetSpParameterSet - используется для извлечения параметров для указанной хранимой процедуры

Кэширование и извлечение параметров

С помощью метода CacheParameterSet набор параметров (объектов типа SqlParameter) может быть сохранен в кэше, который реализован на базе объекта HashTable. В качестве ключа используется объединение содержимого строки соединения и текста команды.

Для извлечения параметров из кэша используется метод GetCachedParameterSet, который возвращает массив объектов типа SqlParameter с инициализированными свойствами (имя, значение, тип данных, направление и т.п.).

В следующем примере показано как сохранить параметры запроса в кэше и извлечь их используя методы класса SqlHelperParameterCache.

Const ConnectionString As String = _
 "SERVER=(local);DATABASE=Northwind;INTEGRATED SECURITY=True;"
Dim Query As String = _
 "SELECT ProductName FROM Products WHERE Category=@Cat AND SupplierID=@Sup"
´
´ Кэширование параметров
´
Dim ParamsToStore(1) As SqlParameter
ParamsToStore(0) = New SqlParameter("@Cat",  SqlDbType.Int)
ParamsToStore(1) = New SqlParameter("@Sup",  SqlDbType.Int)
SqlHelperParameterCache.CacheParameterSet(ConnectionString, Query, _
 ParamsToStore)

´
´ Извлечение параметров
´
Dim StoredParams(1) As SqlParameter
StoredParams = SqlHelperCache.GetCachedParameterSet(ConnectionString, Query)
StoredParams(0).Value = 2
StoredParams(1).Value = 3

´
´ Использование параметров в команде
´
Dim DS As DataSet
DS = SqlHelper.Executedataset(ConnectionString, CommandType.Text, Query, _
 StoredParams)

Извление параметров хранимых процедур

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

Const ConnectionString As String = _
 "SERVER=(local);DATABASE=Northwind;INTEGRATED SECURITY=True;"
Dim SPName As String = "SalesByCategory"

Dim StoredParams(1) As SqlParameter
StoredParams = SqlHelperParameterCache.GetSpParameterSet(ConenctionString, _
 SPName)
StoredParams(0).Value = "Beverages"
StoredParams(1).Value = "1997"

Dim DS As DataSet
DS = SqlHelper.ExecuteDataSer(ConnectionString, _
       CommandType.StoredProcedure, SPName, StoredParams)

Загрузка и установка блока Microsoft Data Access Application Block

Блок Microsoft Data Access Application Block можно загрузить в Web-сайта компании Microsoft по адресу: http://download.microsoft.com/download/VisualStudioNET/daabref/RTM/NT5/EN-US/DataAccessApplicationBlock.msi

После запуска инсталяционного пакета DataAccessApplicationBlock.msi в меню Programs появится элемент Microsoft Application Blocks for .NET. Блок Microsoft Data Access Application Block находится в подменю Data Access.

После этого необходимо выбрать либо проект на Visual Basic, либо на C# для компиляции сборки Microsoft.ApplicationBlocks.Data.dll.

Системные требования

  • Microsoft Windows 2000, Windows XP Professional
  • .NET Framework SDK
  • Visual Studio .NET (рекомендуется, но не требуется)
  • Microsoft SQL Server 7.0 или более поздней версии

Может пригодится:


Автор: Алексей Федоров
Прочитано: 4521
Рейтинг:
Оценить: 1 2 3 4 5

Комментарии: (0)

Добавить комментарий
Ваше имя*:
Ваш email:
URL Вашего сайта:
Ваш комментарий*:
Код безопастности*:

Рассылка новостей
Рейтинги
© 2007, Программирование Исходники.Ру