Опубликован: 05.08.2007 | Уровень: специалист | Доступ: платный
Лекция 4:

Подключение к базе данных Microsoft SQL Server

< Лекция 3 || Лекция 4: 123 || Лекция 5 >
Аннотация: Подключение к базе данных Microsoft SQL Server с разделенным доступом. События InfoMessage и StateChange объекта Connection. Обработка исключений. Работа с пулом соединений. Microsoft SQL Profiler
Ключевые слова: system administrator, adaptive configuration

Подключение к базе данных Microsoft SQL Server

Подключение к базе данных Microsoft SQL Server с разделенным доступом

Среда Microsoft SQL Server предоставляет средства разделенного управления объектами сервера. Для доступа используются два режима аутентификации: режим аутентификации Windows (Windows Authentication) и режим смешанной аутентификации (Mixed Mode Authentication). При установке первый режим предлагается по умолчанию, поэтому, скорее всего, ваш сервер сконфигурирован с его использованием (рис. 4.1):

Режим аутентификации Windows предлагаемый по умолчанию при установке

Рис. 4.1. Режим аутентификации Windows предлагаемый по умолчанию при установке

В этом случае аутентификация пользователя осуществляется операционной системой Windows. Затем SQL Server использует аутентификацию операционной системы для определения уровня доступа. При подключении в окне "Свойства связи с данными" мы также указывали этот режим (рис. 4.2):

Режим аутентификации Windows в окне "Свойства связи с данными"

Рис. 4.2. Режим аутентификации Windows в окне "Свойства связи с данными"

Смешанный режим позволяет проводить аутентификацию пользователя как средствами операционной системы, так и с применением учетных записей Microsoft SQL Server. Для включения этого режима запускаем SQL Server Enterprise Manager, на узле локального сервера щелкаем правой кнопкой и выбираем пункт меню "Свойства". В появившемся окне "SQL Server Properties" переходим на вкладку "Security", устанавливаем переключатель в положение "SQL Server and Windows" (рис. 4.3).

Включение режима смешанной аутентификации

увеличить изображение
Рис. 4.3. Включение режима смешанной аутентификации

После подтверждения изменений закрываем окно свойств. Раскрываем узел "Security" текущего сервера, выделяем объект "Logins". В нем мы видим две записи - "BULTIN\Администраторы" и "sa". Первая из них предназначена для аутентификации учетных записей операционной системы. Вторая - "sa" (system administrator) - представляет собой учетную запись администратора сервера, по умолчанию она конфигурируется без пароля. Для его создания щелкаем правой кнопкой мыши на записи, в появившемся меню выбираем пункт "Свойства". В поле "Password" окна "SQL Server Login Properties" вводим пароль "12345" и подтверждаем его (рис. 4.4):

Установка пароля на учетной записи "sa"

увеличить изображение
Рис. 4.4. Установка пароля на учетной записи "sa"

Займемся теперь подключением к заданной базе данных, например Northwind, от имени учетной записи "sa". Создайте новое Windows-приложение, назовите его "VisualSQLUser_sa". Перетаскиваем на форму элемент управления DataGrid, его свойству Dock устанавливаем значение "Fill". В окне Toolbox переходим на вкладку Data и дважды щелкаем на объекте SqlDataAdapter. В появившемся мастере создаем новое подключение. В окне "Свойства связи с данными" указываем название локального сервера (local), имя пользователя (sa) и пароль (12345), а также базу данных Northwind (рис. 4.5):

Окно "Свойство связи с данными". Приложение VisualSQLUser_sa

Рис. 4.5. Окно "Свойство связи с данными". Приложение VisualSQLUser_sa

Дополнительно мы установили галочку "Разрешить сохранение пароля". При этом его значение (12345) будет сохранено в виде текста в строке connectionString. Пока мы вынуждены это сделать - интерфейс нашего приложения не предусматривает возможность ввода пароля в момент подключения. Завершаем работу мастера "Data Adapter Configuration Wizard", настраивая извлечение всех записей из таблицы Customers. В последнем шаге мы снова соглашаемся сохранить пароль в виде текста (рис. 4.6).

Диалоговое окно сохранения пароля

Рис. 4.6. Диалоговое окно сохранения пароля

На панели компонент формы выделяем объект DataAdapter, переходим в его окно Properties и нажимаем на ссылку "Generate dataset". Оставляем название объекта DataSet, предлагаемое по умолчанию. В конструкторе формы заполняем объект DataSet, а также определяем источник данных для элемента DataGrid:

public Form1()
		{
			InitializeComponent();
			sqlDataAdapter1.Fill(dataSet11);
			dataGrid1.DataSource = dataSet11.Tables[0].DefaultView;
		}

Запускаем приложение. На форму выводятся записи таблицы Customers (рис. 4.7):

Готовое приложение VisualSQLUser_sa

Рис. 4.7. Готовое приложение VisualSQLUser_sa

В программном обеспечении к курсу вы найдете приложение VisualSQL User_sa (Code\Glava2\ VisualSQLUser_sa).

Сделаем точно такое же приложение без использования визуальных средств студии. Создайте новый Windows-проект, назовите его "ProgrammSQLUser_sa". Добавляем на форму элемент управления DataGrid, его свойству Dock устанавливаем значение "Fill". Подключаем пространство имен для работы с базой:

using System.Data.SqlClient;

В классе формы создаем строки connectionString и commandText:

string connectionString = "workstation id=9E0D682EA8AE448;
 user id=sa;data source=\"(local)\";" +
 "persist security info=True;initial catalog=Northwind;password=12345";
string commandText = "SELECT * FROM Customers";

В конструкторе формы создаем все объекты ADO .NET:

public Form1()
		{
			InitializeComponent();
			SqlConnection conn = new SqlConnection();
			conn.ConnectionString = connectionString;
			SqlDataAdapter dataAdapter = new SqlDataAdapter(commandText, conn);
			DataSet ds = new DataSet();
			dataAdapter.Fill(ds);
			dataGrid1.DataSource = ds.Tables[0].DefaultView;
			conn.Close();
		}

В программном обеспечении к курсу вы найдете приложение Programm SQLUser_sa (Code\Glava2\ProgrammSQLUser_sa).

В отличие от подключений к базе данных Microsoft Access здесь мы не встретили никаких сложностей. Вкладка "Подключение" в окне "Свойства связи с данными" действительно предоставляет все средства для подключения к базе данных Microsoft SQL Server. Для аутентификации пользователя достаточно указать его имя и пароль.

События объекта Connection

Класс Connection поддерживает несколько событий, позволяющих отслеживать статус соединения и получать уведомляющие сообщения для экземпляра этого класса. Описание событий приводится в таблице 4.1.

Таблица 4.1. События объекта Connection
Событие Описание
Disposed Возникает при вызове метода Dispose экземпляра класса
InfoMessage Возникает при получении информационного сообщения от поставщика данных
StateChange Возникает при открытии или закрытии соединения. Поддерживается информация о текущем и исходном состояниях

При вызове метода Dispose объекта Connection происходит освобождение занимаемых ресурсов и сборка мусора. При этом неявно вызывается метод Close.

Рассмотрим применение события StateChange и обработчик события Disposed. Создайте новое Windows-приложение и назовите его "ConnectionEventsSQL". Свойству Size формы устанавливаем значение "600;300". Помещаем на форму элемент управления DataGrid, его свойству Dock устанавливаем значение "Fill". Добавляем элемент Panel, его свойству Dock устанавливаем значение "Bottom". На панели размещаем две надписи и одну кнопку, устанавливая следующие их свойства:

label1, свойство Значение
Location 8; 8
Size 208; 80
Text
labe2, свойство Значение
Location 232; 8
Size 208; 80
Text
button1, свойство Значение
Name btnFill
Location 488; 40
Text Заполнить

Подключаем пространство имен для работы с базой:

using System.Data.SqlClient;

В классе формы создаем строки connectionString и commandText:

string connectionString = "workstation id=9E0D682EA8AE448;
 packet size=4096;integrated security=SSPI;data source=\"(local)\";
 persist security info=False;initial catalog=Northwind";
string commandText = "SELECT * FROM Customers";

Объекты ADO .NET будем создавать в обработчике события Click кнопки "btnFill":

private void btnFill_Click(object sender, System.EventArgs e)
{
	SqlConnection conn = new SqlConnection();
	conn.ConnectionString = connectionString;
	//Делегат EventHandler связывает метод-обработчик conn_Disposed 
	//с событием Disposed объекта conn
	conn.Disposed+=new EventHandler(conn_Disposed);
	//Делегат StateChangeEventHandler связывает метод-обработчик 
	//conn_StateChange с событием StateChange объекта conn
	conn.StateChange+= new StateChangeEventHandler(conn_StateChange);
	SqlDataAdapter dataAdapter = new SqlDataAdapter(commandText, conn);
	DataSet ds = new DataSet();
	dataAdapter.Fill(ds);
	dataGrid1.DataSource = ds.Tables[0].DefaultView;
	//Метод Dispose, включающий в себя метод Close, 
	//разрывает соединение и освобождает ресурсы. 
	conn.Dispose();
}

Не забывайте про возможности IntelliSense - как всегда, для создания методов-обработчиков дважды нажимаем клавишу TAB (рис. 4.8):

Автоматическое создание методов-обработчиков

Рис. 4.8. Автоматическое создание методов-обработчиков

В методе conn_Disposed просто выводим текстовое сообщение в надпись "label2":

private void conn_Disposed(object sender, EventArgs e)
{
	label2.Text+="Событие Dispose";
}

При необходимости в этом методе могут быть определены соответствующие события. В методе conn_StateChange будем получать информацию о текущем и исходном состояниях:

private void conn_StateChange(object sender, StateChangeEventArgs e)
{
	label1.Text+="\nИсходное состояние: "+e.OriginalState.ToString() 
	 + "\nТекущее состояние: "+ e.CurrentState.ToString();
}

Запускаем приложение. До открытия соединения состояние объекта conn было закрытым. В момент открытия текущим состоянием становится открытое, а предыдущим - закрытое. Этому соответствуют первые две строки, выведенные в надпись (рис. 4.9):

Готовое приложение ConnectionEventsSQL

Рис. 4.9. Готовое приложение ConnectionEventsSQL

После закрытия соединения (вызова метода Dispose ) текущим состоянием становится закрытое, а предыдущим - открытое. Этому соответствуют последние две строки, выводимые в надпись.

Конечно, в таком предельно простом приложении и так ясен статус соединения. Но сама идея может применяться в любых, сколь угодно сложных приложениях, когда необходимо определять статус одного из нескольких подключений.

В программном обеспечении к курсу вы найдете приложение Connection EventsSQL (Code\Glava2\ ConnectionEventsSQL).

Создадим теперь аналогичное приложение, использующее базу данных Microsoft Access. Для того чтобы не терять время на создание пользовательского интерфейса, скопируйте папку приложения Connection EventsSQL и назовите ее "ConnectionEventsMDB". Перейдем к редактированию кода. Подключаем пространство имен для работы с базой данных:

using System.Data.OleDb;

В классе формы создаем строки connectionString и commandText:

string connectionString = @"Provider=""Microsoft.Jet.OLEDB.4.0"
 "; Data Source=""E:\Program Files\Microsoft Visual Studio .NET 2003\Crystal 
 Reports\Samples\Database\xtreme.mdb"";User ID=Admin;Jet OLEDB:Encrypt 
 Database=False";
string commandText = "SELECT * FROM Customer";

Здесь мы снова будем подключаться к базе данных xtreme.mdb. Обработчик события Click кнопки "btnFill" примет следующий вид:

private void btnFill_Click(object sender, System.EventArgs e)
{
	OleDbConnection conn = new OleDbConnection();
	conn.ConnectionString = connectionString;
	//Делегат EventHandler связывает метод-обработчик conn_Disposed 
	//с событием Disposed объекта conn
	conn.Disposed+=new EventHandler(conn_Disposed);
	//Делегат StateChangeEventHandler связывает метод-обработчик 
	//conn_StateChange с событием StateChange объекта conn
	conn.StateChange+= new StateChangeEventHandler(conn_StateChange);
	OleDbDataAdapter dataAdapter = new OleDbDataAdapter(commandText, conn);
	DataSet ds = new DataSet();
	dataAdapter.Fill(ds);
	dataGrid1.DataSource = ds.Tables[0].DefaultView;
	//Метод Dispose, включающий в себя метод Close, 
	//разрывает соединение и освобождает ресурсы. 
	conn.Dispose();
}

Обработчики conn_Disposed и conn_StateChange будут иметь в точности такой же вид. Запускаем приложение - на форму снова выводится статус соединения (рис. 4.10):

 Готовое приложение ConnectionEventsMDB

Рис. 4.10. Готовое приложение ConnectionEventsMDB

В программном обеспечении к курсу вы найдете приложение Connection EventsMDB (Code\Glava2\ ConnectionEventsMDB).

< Лекция 3 || Лекция 4: 123 || Лекция 5 >
Александра Тимофеева
Александра Тимофеева
Украина, Киев
Bakke Aleksander
Bakke Aleksander
Россия, Mуниципальный округ N 4