CommandText
Для извлечения таблиц и содержащихся в них данных используются SQL-запросы. Переменная CommandText содержит в себе SQL-запрос, синтаксис которого адаптирован для данного поставщика данных. Мы можем управлять извлечением данных, изменяя строку CommandText. Скопируйте папку проекта ProgrammDataSQL и назовите ее CommandText. Запустите проект и перейдите в код формы. Изменим string СommandText так, чтобы извлекать в DataGrid только поля CustomerID, ContactName, Country и Phone. Для этого удалим ненужные поля. В результате получится следующий SQL-запрос:
string CommandText = "SELECT CustomerID, ContactName, Country, Phone FROM Customers";
Запустите приложение. Теперь на форму выводятся только соответствующие четыре поля (рис. 4.46).
Рис. 4.46.
Ограничение выводимых полей
Выведем теперь все записи клиентов, имена которых начинаются на "М":
string CommandText = "SELECT CustomerID, ContactName, Country,
Phone FROM Customers where ContactName like 'M%'";
Запускаем приложение. Запрос выбрал только записи на букву "M" (рис. 4.47).
Рис. 4.47.
Ограничение выводимых полей
Вы можете использовать все возможности языка SQL для отбора данных и модификации строки CommandText для получения нужного результата. Не пробуйте только использовать команды insert, update или delete — изменение записей в базе данных мы рассмотрим позже.
ConnectionString
Строка соединения ConnectionString определяет параметры, необходимые для установления соединения с источником данных. Строка соединений при использовании мастеров генерируется средой, но можно (и желательно — во избежание неточностей и ошибок) писать эту строчку вручную. Рассмотрим еще раз строки соединения, которые были созданы при подключении к базам данных xtreme и Northwind:
string ConnectionString = @"Jet
OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Database
Password=;Data Source=""E:\Program Files\Microsoft Visual Studio .NET 2003\Crystal
Reports\Samples\Database\xtreme.mdb"";Password=;Jet OLEDB:Engine Type=5;Jet OLEDB:Global Bulk
Transactions=1;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System database=;Jet
OLEDB:SFP=False;Extended Properties=;Mode=Share Deny None;Jet OLEDB:New Database Password=;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:Encrypt Database=False";
Листинг
4.10.
База данных xtreme, проект ProgrammDataMDB
(html,
txt)
string ConnectionString =
"workstation id=7EA2B2F6068D473;packet size=4096;integrated security=SSPI;data sou" +
"rce=\"(local)\";persist security info=False;initial catalog=NorthwindCS";
В этой строках через точку с запятой просто перечисляются параметры соединения. В таблице 4.2 приводятся основные значения этих параметров.
Таблица 4.2.
Основные параметры ConnectionString| Параметр | Описание |
|---|
| Параметр | Описание |
| Provider (Поставщик) | Свойство применяется для установки или возврата имени поставщика для соединения, используется только для объектов OleDbConnection |
| Connection Timeout или Connect Timeout (Время ожидания связи) | Длительность времени ожидания связи с сервером перед завершением попытки и генерацией исключения в секундах. По умолчанию 15 |
| Initial Catalog (Исходный каталог) | Имя базы данных |
| Data Source (Источник данных) | |
| Имя используемого SQL-сервера, когда установлено соединение, или имя файла базы данных Microsoft Access |
| Password (Пароль) | Пользовательский пароль для учетной записи SQL Server. |
| User ID (Пользовательский ID) | Пользовательское имя для учетной записи SQL Server |
| Workstation ID | Имя рабочей станции или компьютера |
| Integrated Security или Trusted Connection (Интегрированная безопасность или Доверительное соединение) | Параметр, который определяет, является ли соединение защищенным. True, False и SSPI — возможные значения. (SSPI – эквивалент True.) |
| Persist Security Info (Удержание защитной информации) | Когда установлено False, нуждающаяся в защите информация, такая как пароль, не возвращается как часть соединения, если связь установлена или когда-либо была установленной. Выставление этого свойства в True может быть рискованным в плане безопасности. По умолчанию False |
При создании строки ConnectionString Мастером происходит генерирование довольно многих лишних параметров. Нельзя сказать, что они не нужны, — просто Мастер предусматривает все возможности использования этого подключения и вставляет соответствующие значения. В действительности необходимых значений для простого извлечения данных всего несколько:
- Provider (только OLE DB)
- Data Source
- Initial Catalog
- User ID/Password
- Persist Security Info
Скопируйте папки с проектами ProgrammDataMDB и ProgrammDataSQL. Переименуйте копии в ConnStringMDB и ConnStringSQL. Измените значения ConnectionString следующим образом:
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";
Листинг
4.11.
База данных xtreme, проект ConnStringMDB
(html,
txt)
string ConnectionString =
"workstation id=7EA2B2F6068D473;integrated security=SSPI;
data source=\"(local)\";persist security
info=False;initial catalog=NorthwindCS";
Мы значительно сократили количество параметров, получив прежнюю функциональность приложений.
Где определяется строка подключения, когда мы создаем объект DataAdapter не программно, а с помощью Мастера? Среда генерирует строку подключения вместе с кодом для DataAdapter, и в этом нетрудно убедиться. Запустите приложение, которое мы делали, вообще ничего не зная об объектах ADO.NET, — DataWizardMDB. Перейдите в код формы, откройте область Windows Form Designer generated code и найдите строку подключения:
this.oleDbConnection1.ConnectionString = @"Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet
OLEDB:Database Locking Mode=1;Jet OLEDB:Database Password=;Data
Source=""D:\Uchebnik\Code\Glava4\RBProduct.mdb"";Password=;Jet OLEDB:Engine Type=5;Jet
OLEDB:Global Bulk Transactions=1;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System
database=;Jet OLEDB:SFP=False;Extended Properties=;Mode=Share Deny None;Jet OLEDB:New Database
Password=;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:Encrypt Database=False";
Листинг
4.12.
(html,
txt)
Когда мы переносим объект DataAdapter из панели инструментов Toolbox (со вкладки Data) на форму, вместе с ним образуется объект DBConnection, в свойствах которого указывается строка ConnectionString и другие параметры подключения (рис. 4.48)
увеличить изображениеРис. 4.48.
Свойства объекта sqlConnection1 проекта VisualDataSQL
Управление соединением. Объект Connection
Большинство источников данных поддерживает ограниченное количество соединений. Так, база данных Microsoft Access может поддерживать одновременную работу не более чем с 50 пользователями. При попытке обращения к базе данных, лимит соединений которой исчерпан, пользователь не получит нужной ему информации и будет вынужден ждать освобождения соединения. Задача разработчика заключается в минимизации времени связи с базой данных, поскольку соединение занимает полезные системные ресурсы.
Когда вы вызываете у объекта DataAdapter метод (например, Fill), то он сам проверяет, открыто ли соединение. Если соединения нет, то DataAdapter открывает соединение, выполняет задачи и затем закрывает соединение.
Явное управление соединением — лучший подход к работе с базами данных. Он обладает рядом преимуществ:
- дает более чистый и удобный для чтения код;
- помогает при отладке приложения;
- является более эффективным.
Для явного управления соединением используется объект Connection. Создайте новый проект и назовите его ConnectionMDB. Перетащите элемент управления DataGrid из панели инструментов Toolbox и установите свойству Dock значение Fill. Перейдите в код формы. Подключаем пространство имен:
В конструкторе Form1 после InitializeComponent создаем объект Connection:
OleDbConnection conn = new OleDbConnection(ConnectionString);
В качестве параметра объекту conn передается строка подключения ConnectionString.
Можно также устанавливать строку подключения через свойство созданного объекта сonn:
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = ConnectionString;
Теперь нам необходимо определить параметры самой строки ConnectionString. Вы можете сделать это вручную или скопировав код из приложения ConnStringMDB (подключаться будем к базе данных xtreme).
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";
Листинг
4.13.
(html,
txt)
Теперь можно устанавливать соединение, вызывая метод Open объекта Connection:
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = ConnectionString;
conn.Open();