Файл: 1_C#_Введение_в_программирование_Уч_пособ_(Марченко-2005).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.12.2025
Просмотров: 1364
Скачиваний: 3
Защищенные методы
Dispose |
|
|
Перегружен. |
Переопределен. |
Освобождает |
ресурсы, |
|
|
|
используемые объектом OleDbConnection. |
|
||
Finalize |
(унаследовано |
от |
Переопределен. Освобождает неуправляемые |
ресурсы и |
||
Component) |
|
|
выполняет другие действия по очистке, перед тем как |
|||
|
|
|
пространство, которое использует Component, будет |
|||
|
|
|
восстановлено сборщиком мусора. |
|
финализации |
|
|
|
|
В языках C# и C++ для функций |
|||
|
|
|
используется синтаксис деструктора. |
|
||
GetService |
(унаследовано |
от |
Возвращает объект, представляющий службу, которую |
|||
Component) |
|
|
предоставляет Component или его Container. |
|
||
MemberwiseClone (унаследовано |
Создает неполную копию текущего Object. |
|
||||
от Object) |
|
|
|
|
|
|
События
Disposed |
Adds an event handler to listen to the Disposed event |
|
on the component. |
InfoMessage |
Некоторые СУБД (SQL Server) поддерживают механизм |
|
информационных сообщений. Это событие occurs when the |
|
provider sends a warning or an informational message. |
StateChange |
Occurs when the state of the connection changes. |
// Объявили ссылку…
private System.Data.OleDb.OleDbConnection RollsConnection; // Определили объект…
this.RollsConnection = new System.Data.OleDb.OleDbConnection(); // Настроили строкой соединения… this.RollsConnection.ConnectionString =
@"Jet OLEDB:Global Partial Bulk Ops=2;" +"Jet OLEDB:Registry Path=;"
+"Jet OLEDB:Database Locking Mode=1;"
+@"Data Source=""F:\Users\WORK\RollsBase\Rolls.mdb""" +";Jet OLEDB:Engine Type=5;" +@"Provider=""Microsoft.Jet.OLEDB.4.0"";"
+"Jet OLEDB:System database=;" +"Jet OLEDB:SFP=False;" +"persist security info=False;" +"Extended Properties=;"
+@"Mode=""ReadWrite|Share Deny None"";" +"Jet OLEDB:Encrypt Database=False;" +"Jet OLEDB:Create System Database=False;"
+"Jet OLEDB:Don't Copy Locale on Compact=False;" +"Jet OLEDB:Compact Without Replica Repair=False;" +"User ID=Admin;"
+"Jet OLEDB:Global Bulk Transactions=1";
Подключение к БД на этапе разработки приложения
Средствами MS Access создаётся простая база данных. После определения общей структуры базы, основных свойств её полей, база заполняется.
Для внешнего окружения - это всего лишь файл с расширением .mdb (в нашем случае F:\SharpUser\CS.book\Rolls.db).
Для того чтобы приложение работало с данным файлом как с базой данных, необходимо создать соединение с базой Rolls.
Создание соединения средствами встроенных мастеров предполагает следующую последовательность шагов в рамках Visual Studio.NET:
открывается вкладка Server Explorer,
с использованием инструмента “Connect to DataBase” открывается окошко “Data Link Properties”, которое предоставляет интерфейс для настройки соединения с базой данных. В окошке четыре вкладки: Provider, Connection, Advanced, All,
на вкладке Provider выбирается провайдер соответствующего типа. Критерии выбора (пока) остаются неизвестными. Главное, что далеко не все провайдеры могут подключать нашу базу. Вкладки Connection, Advanced и All используются для настройки свойств соединения. В зависимости от типа провайдера в
237
качестве параметров могут быть указаны имя сервера, имя пользователя, пароль
и т.д.,
факт возможного успешного подключения проверяется на вкладке Connection с помощью кнопки “Test Connection”, которая запускает соответствующие методы тестирования. Провайдер Microsoft Jet 4.0 OLE DB Provider (при условии, что User name на вкладке Connection == Admin) успешно прошёл тестирование. На нём пока и остановимся.
Новое соединение появляется в окне Server Explorer’а в виде пиктограммы с
раскрывающимся списком, который содержит информацию о свойствах соединения. После этого соединение надо переместить (“перетащить”) в окно дизайнера – прямо на форму. Возможно, что при этом придётся ответить на вопрос по поводу включения пароля в “connection string”. Всё.
Деятельность по добавлению к приложению соединения средствами мастера соединений на этом завершается. При этом в кодах приложения размещается соответствующий программный код, который обеспечивает создание объекта соединения соответствующего типа и с определёнными параметрами.
Внимательный анализ и медитация над этим программным кодом делает вполне возможной деятельность по самостоятельному созданию соединений в приложении без участия мастера соединений.
using System;
using System.Drawing; using System.Collections;
using System.ComponentModel; using System.Windows.Forms;
using System.Data; // Пространство имён для работы с базами данных.
namespace ADO01
{
///<summary>
///Summary description for Form1.
///</summary>
public class Form1 : System.Windows.Forms.Form
{
// Объект, представляющий соответствующее соединение. private System.Data.OleDb.OleDbConnection oleDbConnection1;
///<summary>
///Required designer variable.
///</summary>
private System.ComponentModel.Container components = null;
public Form1()
{
InitializeComponent();
}
///<summary>
///Clean up any resources being used.
///</summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
///<summary>
///Required method for Designer support - do not modify
///the contents of this method with the code editor.
///</summary>
//this.oleDbConnection1.ConnectionString в InitializeComponent
//- это такая строка соединения. Все характеристики соединения
238
//в одном “@-quoted string literals”! В исходниках – вся информация
//размещается в одной строке.
private void InitializeComponent()
{
this.oleDbConnection1 = new System.Data.OleDb.OleDbConnection();
//
//oleDbConnection1
this.oleDbConnection1.ConnectionString = @”Jet OLEDB:Global Partial Bulk Ops=2; Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1; Data
Source=””F:\SharpUser\CS.book\Rolls.db””; Jet OLEDB:Engine Type=5;Provider=””Microsoft.Jet.OLEDB.4.0””;Jet OLEDB:System database=;Jet
OLEDB:SFP=False;persist security info=False;Extended Properties=;Mode=Share Deny None;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet
OLEDB:Don’t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;User ID=Admin;Jet OLEDB:Global Bulk Transactions=1”;
//Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 15); this.ClientSize = new System.Drawing.Size(292, 268); this.Name = “Form1”;
this.Text = “Form1”;
}
#endregion
///<summary>
///The main entry Point for the application.
///</summary>
[STAThread] static void Main()
{
Application.Run(new Form1());
}
}
}
Если подобная конструкция (соединение с БД) конструируется вручную, следует помнить о механизме конкатенации символьных строк и о том, что объём информации в строке соединения может быть минимизирован. Судя по всему, такой строки вполне достаточно:
this.oleDbConnection1.ConnectionString =
@“Provider=Microsoft.Jet.OLEDB.4.0;” + “Data Source=” + @“F:\SharpUser\CS.book\Rolls.db”;
Конечно же, следует упомянуть такую замечательную разновидность формы, как форма, которая строится с использованием помощника Data Form Wizard. Волшебник затачивает форму для работы с базой с минимальным необходимым набором элементов управления под конкретную базу. Со всем необходимым набором объектов, используемых для установления соединения.
Ручная сборка объекта Connection
Влюбом случае, СОЕДИНЕНИЕ - это:
объект-представитель класса System.Data.OleDb.OleDbConnection, который объявляется в классе формы.
private System.Data.OleDb.OleDbConnection rollsConnection;
, который создаётся, если сборка с помощью волшебника – в методе InitializeComponent(), если вручную – то (наверное) в конструкторе формы
this.rollsConnection = new System.Data.OleDb.OleDbConnection();
после чего свойство ConnectionString данного объекта инициируется посредством строки соединения (имя поставщика, его версия, путь (возможно относительный) к базе)
239
this.rollsConnection.ConnectionString = @"Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Data Source=""F:\SharpUser\CS.book\Rolls.db\Rolls.mdb"";Jet OLEDB:Engine Type=5;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System database=;Jet OLEDB:SFP=False;persist security info=False;Extended Properties=;Mode=Share Deny None;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;User ID=Admin;Jet OLEDB:Global Bulk Transactions=1";
Следует также упомянуть альтернативный вариант конструктора, в котором строка соединения передаётся в виде параметра конструктору. Что-нибудь в таком стиле:
string cs = @"Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Data Source=""F:\SharpUser\CS.book\Rolls.db\Rolls.mdb"";Jet OLEDB:Engine Type=5;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System database=;Jet OLEDB:SFP=False;persist security info=False;Extended Properties=;Mode=Share Deny None;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;User ID=Admin;Jet OLEDB:Global Bulk Transactions=1";
this.rollsConnection = new System.Data.OleDb.OleDbConnection(sc);
Созданное таким образом соединение открывается,
rollsConnection.Open();
а затем закрывается
rollsConnection.Close();
Имитация отсоединенности. Пул соединений
В ADO.NET официально заявлено, что в приложении используются ОТСОЕДИНЕННЫЕ компоненты.
Присоединились, каким-то образом получили требуемую информацию, отсоединились… Но есть проблема. Открытие и закрытие соединения с БД операция трудоёмкая. Поддерживать соединение постоянно – плохо. Обрывать и восстанавливать соединение всякий раз по мере необходимости – тоже, получается плохо. Компромиссное решение – ПУЛ соединений. Место, где сохраняются установленные и неиспользуемые в данный момент соединения.
Приложение создаёт объект соединения, устанавливает соединение с базой, использует его и, не разрывая соединения с базой, передаёт его в ПУЛ соединений. В дальнейшем, по мере необходимости, объект соединения используется из пула. Если несколько приложений стремятся одновременно получить доступ к БД и в пуле не остаётся свободных соединений – создаётся и настраивается новый объект. Который после употребления приложением также передаётся в пул. Таким образом поддерживается несколько готовых к использованию соединений, общее количество которых (по крайней мере, теоретически) оказывается меньше общего количества приложений, работающих с базой в данный момент.
Пул включается по умолчанию. И при этом выполнение оператора
rollsConnection.Close();
Приводит НЕ К РАЗРЫВУ соединения с базой, а к передаче этого соединения в пул соединений. Для повторного использования. Запретить размещение объекта соединения в пуле можно, указав в строке соединения для OLE DB.NET атрибут
OLE DB Services = -4
При котором провайдер OLE DB.NET не будет помещать соединение в пул при закрытии, а будет всякий раз его разрывать и устанавливать заново.
240