Файл: 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