2007 г.
Марченко Антон Леонардович
Интернет-Университет Информационных Технологий, INTUIT.ru
Назад Оглавление Вперёд
Имитация отсоединенности. Пул соединений
В ADO .NET официально заявлено, что в приложении используются ОТСОЕДИНЕННЫЕ компоненты.
Присоединились, каким-то образом получили требуемую информацию, отсоединились... Но есть проблема. Открытие и закрытие соединения с БД – операция трудоемкая. Поддерживать соединение постоянно – плохо. Обрывать и восстанавливать соединение всякий раз по мере необходимости – тоже получается плохо. Компромиссное решение – ПУЛ соединений: место, где сохраняются установленные и неиспользуемые в данный момент соединения.
Приложение создает объект соединения, устанавливает соединение с базой, использует его и, не разрывая соединения с базой, передает его в ПУЛ соединений. В дальнейшем, по мере необходимости, объект соединения используется из пула. Если несколько приложений стремятся одновременно получить доступ к БД и в пуле не остается свободных соединений – создается и настраивается новый объект, который после употребления приложением также передается в пул. Таким образом поддерживается несколько готовых к использованию соединений, общее количество которых (по крайней мере теоретически) оказывается меньше общего количества приложений, работающих с базой в данный момент.
Пул включается по умолчанию. И при этом выполнение оператора
rollsConnection.Close();
приводит НЕ К РАЗРЫВУ соединения с базой, а к передаче этого соединения в пул соединений для повторного использования. Запретить размещение объекта соединения в пуле можно, указав в строке соединения для OLE DB .NET атрибут
OLE DB Services = –4
при котором провайдер OLE DB .NET не будет помещать соединение в пул при закрытии, а будет всякий раз его разрывать и устанавливать заново.
Пул соединений освобождается при выполнении метода Dispose
. Этот метод вызывается сборщиком мусора при завершении приложения. В теле этого метода обеспечивается вызов метода Close
. Таким образом, даже незакрытое соединение при завершении приложения закрывается. Явный вызов этого метода также приводит к разрыву соединения, освобождению занимаемых ресурсов и подготовке объекта к уничтожению сборщиком мусора.
На самом деле, если класс предоставляет метод Dispose()
, именно его, а не Close()
, следует вызывать для освобождения занимаемых объектом ресурсов.
Применение объекта соединения для исследования схемы базы
Установив соединение с базой данных, можно исследовать ее схему. Эта возможность обеспечивается объявленным в классе соединения методом GetOleDbSchemaTable
.
Управление процессом сбора информации о схеме базы обеспечивается двумя параметрами метода.
Первый параметр представлен статическими свойствами класса OleDbSchemaGuid
.
Второй параметр – массивом (кортежем) объектов, каждый из которых в зависимости от занимаемой позиции в кортеже может принимать определенное фиксированное значение либо иметь значение null:
Класс OleDbSchemaGuid. Определение схемы базы
Namespace: System.Data.OleDb
При вызове метода GetOleDbSchemaTable
значение – параметр типа OleDbSchemaGuid
обеспечивает возвращение типа схемы таблицы.
Информация о структуре класса представлена ниже.
Следует иметь в виду, что не все провайдеры полностью поддерживают предоставляемые классом возможности по определению схемы таблицы.
Члены класса OleDbSchemaGuid
:
Открытые конструкторыOleDbSchemaGuid -конструктор | Инициализирует новый экземпляр класса OleDbSchemaGuid |
Открытые поляAssertions | Статический. Возвращает утверждения, определенные в каталоге, владельцем которого является указанный пользователь |
Catalogs | Статический. Возвращает физические атрибуты, связанные с каталогами, доступными из источника данных. Возвращает утверждения, определенные в каталоге и принадлежащие указанному пользователю |
Character_Sets | Статический. Возвращает наборы символов, определенные в каталоге и доступные указанному пользователю |
Check_Constraints | Статический. Возвращает ограничения проверки, определенные в каталоге и принадлежащие указанному пользователю |
Check_Constraints_By_Table | Статический. Возвращает ограничения проверки, определенные в каталоге и принадлежащие указанному пользователю |
Collations | Статический. Возвращает сравнения знаков, определенные в каталоге и доступные указанному пользователю |
Columns | Статический. Возвращает столбцы таблиц (включая представления), определенные в каталоге и доступные указанному пользователю |
Column_Domain_Usage | Статический. Возвращает столбцы, определенные в каталоге и зависящие от домена, который определен в каталоге и принадлежит указанному пользователю |
Column_Privileges | Статический. Возвращает привилегии для столбцов таблиц, определенные в каталоге и доступные указанному пользователю или предоставленные им |
Constraint_Column_Usage | Статический. Возвращает столбцы, которые используются ссылочными ограничениями, уникальными ограничениями и утверждениями, определенными в каталоге и принадлежащими указанному пользователю |
Constraint_Table_Usage | Статический. Возвращает таблицы, которые используются ссылочными ограничениями, уникальными ограничениями и утверждениями, определенными в каталоге и принадлежащими указанному пользователю |
DbInfoLiterals | Статический. Возвращает список литералов, используемых в текстовых командах и специфичных для конкретного поставщика |
Foreign_Keys | Статический. Возвращает столбцы внешнего ключа, определенные в каталоге данным пользователем |
Indexes | Статический. Возвращает индексы, определенные в каталоге и принадлежащие указанному пользователю |
Key_Column_Usage | Статический. Возвращает столбцы, определенные в каталоге и ограниченные как ключи данным пользователем |
Primary_Keys | Статический. Возвращает столбцы первичного ключа, определенные в каталоге данным пользователем |
Procedures | Статический. Возвращает процедуры, определенные в каталоге и принадлежащие указанному пользователю |
Procedure_Columns | Статический. Возвращает сведения о столбцах наборов строк, возвращаемых процедурами |
Procedure_Parameters | Статический. Возвращает сведения о параметрах и кодах возврата процедур |
Provider_Types | Статический. Возвращает основные типы данных, поддерживаемые поставщиком данных .NET Framework для OLE DB |
Referential_Constraints | Статический. Возвращает ссылочные ограничения, определенные в каталоге и принадлежащие указанному пользователю |
Schemata | Статический. Возвращает объекты схемы, принадлежащие указанному пользователю |
Sql_Languages | Статический. Возвращает уровни соответствия, параметры и диалекты, поддерживаемые данными обработки с помощью реализации SQL |
Statistics | Статический. Возвращает статистические данные, определенные в каталоге и принадлежащие указанному пользователю |
Tables | Статический. Возвращает таблицы (включая представления), определенные в каталоге и доступные указанному пользователю |
Tables_Info | Статический. Возвращает таблицы (включая представления), доступные указанному пользователю |
Table_Constraints | Статический. Возвращает табличные ограничения, определенные в каталоге и принадлежащие указанному пользователю |
Table_Privileges | Статический. Возвращает привилегии для таблиц, определенные в каталоге и доступные указанному пользователю или предоставленные им |
Table_Statistics | Статический. Описывает доступный набор статистических данных по таблицам для поставщика |
Translations | Статический. Возвращает переводы знаков, определенные в каталоге и доступные указанному пользователю |
Trustee | Статический. Определяет доверенные объекты, заданные в источнике данных |
Usage_Privileges | Статический. Возвращает привилегии USAGE для объектов, определенные в каталоге и доступные указанному пользователю или предоставленные им |
Views | Статический. Возвращает представления, определенные в каталоге и доступные указанному пользователю |
View_Column_Usage | Статический. Возвращает столбцы, от которых зависят просматриваемые таблицы, определенные в каталоге и принадлежащие данному пользователю |
View_Table_Usage | Статический. Возвращает таблицы, от которых зависят просматриваемые таблицы, определенные в каталоге и принадлежащие данному пользователю |
Открытые методы Equals | Перегружен. Определяет, равны ли два экземпляра Object |
GetHashCode | Служит хэш-функцией для конкретного типа, пригоден для использования в алгоритмах хэширования и структурах данных, например в хэш-таблице |
GetType | Возвращает Type текущего экземпляра |
ToString | Возвращает String , который представляет текущий Object |
Защищенные методы Finalize | Переопределен. Позволяет объекту Object попытаться освободить ресурсы и выполнить другие завершающие операции, перед тем как объект Object будет уничтожен в процессе сборки мусора. В языках C# и C++ для функций финализации используется синтаксис деструктора |
MemberwiseClone | Создает неполную копию текущего Object |
Ниже представлен фрагмент кода, позволяющий прочитать информацию о схеме базы:
// Применение метода GetOleDbSchemaTable.
// Получение информации о схеме базы данных.
// При этом можно использовать параметр Restrictions,
// с помощью которого можно фильтровать возвращаемые сведения
// о схеме.
private void schemaButton_Click(object sender, System.EventArgs e)
{
// Точной информацией о том, что собой представляют остальные
// члены множества Restrictions, пока не располагаю.
object[] r;
r = new object[] {null, null, null, "TABLE"};
oleDbConnection.Open();
DataTable tbl;
tbl=oleDbConnection.GetOleDbSchemaTable
(System.Data.OleDb.OleDbSchemaGuid.Tables, r);
rpDataGrid.DataSource = tbl;
oleDbConnection1.Close();
}
Таким образом получается информация о схеме базы, связь с которой устанавливается через объект соединения.
Но основная область применения объекта соединения – в составе команды.
Назад Оглавление Вперёд