ADO. Net как базовый объект доступа к базам данных 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

ADO. Net как базовый объект доступа к базам данных



ADO.NET как базовый объект доступа к базам данных

ADO.NET — новый этап в технологии ActiveX Data Objects (ADO, объекты данных ActiveX). Эта модель доступа к данным создана специально для использования в Web-приложениях. Если раньше в ADO упор делался на постоянное соединение с базой данных, то в технологии использования ADO.NET изначально заложена возможность работы приложения в состоянии "разрыва" соединения с базой данных. В ADO.NET обеспечивается возможность работы со всеми совместимыми с OLE DB источниками данных как в локальных сетях в рамках традиционных Windows-приложений, так и в глобальных сетях (Интернет) в рамках Web-приложений.

Из материалов первой темы вы узнаете:

□ структуру компонента доступа к данным ADO.NET;

□ как создать соединение с источником данных — объект Connection;

□ что такое адаптер данных — объект DataAdapter, и для чего он нужен;

И первым делом вам предстоит узнать, как устроен доступ к данным в ADO NET.

Структура компонента доступа к данным ADO.NET

Большинство приложений, которые создаются для конечных пользователей, обеспечивают обработку информации, хранящейся в базах данных (складские, бухгалтерские, торговые, информационно-поисковые системы и т. п.). Это может быть небольшая система, работающая на локальном компьютере, система среднего класса, состоящая из десятка рабочих мест, объединенных локальной сетью, распределенная система, обеспечивающая доступ к данным сотням и тысячам пользователей через сеть Интернет. С точки зрения разработчика желательно иметь единый механизм и единый набор объектов, обеспечивающих доступ к данным, независимо от масштабности решаемой задачи. В технологии Microsoft.NET создана достаточна гибкая и эффективная модель доступа к данным — ADO.NET, предоставляющая разработчикам набор объектов, на основе которых можно создавать приложения любого масштаба (от локальных до глобальных).

При разработке приложения с использованием ADO.NET существует несколько разных стратегий обработки данных. В некоторых случаях требуется просто отобразить в форме определенную информацию, хранящуюся на сервере локальной сети, в других случаях вам нужно обеспечить доступ к данным из разных офисов одной или нескольких компаний не только для чтения, но и для редактирования.

Независимо оттого, что будет происходить с данными, есть определенные фундаментальные понятия, которые вы должны знать и понимать, если собираетесь создавать приложения, обеспечивающие доступ к данным через компонент ADO.NET. Даже если вы лично никогда не будете выполнять некоторые специфические операции, например, редактировать файл XML, содержащий данные, вы должны понимать, как это происходит. Нужно знать архитектуру ADO.NET, составные элементы, их функции, свойства и методы. В данном разделе дается общий обзор наиболее важных понятий.

Обмен данными в формате XML

При работе приложений данные должны перемещаться между исходной базой данных и объектом DataSet. В ADO.NET в качестве единого формата для передачи данных используется XML-формат. Аналогично, если данные записать в некий внешний файл, то они будут записаны в XML-формате. Таким образом, файл с данными в формате XML является точно таким же источником, как и любая база данных, и из него можно поместить данные в объект DataSet. Фактически в ADO.NET XML является фундаментальным форматом для данных. В ADO.NET автоматически создают XML-файлы при передаче информации между объектами и компонентами.

Использование обмена данных в едином формате XML имеет следующие преимущества:

□ XML — единый промышленный стандарт, что обеспечивает разработанным вами прикладным компонентам обмениваться данными с любыми другими компонентами в любых других приложениях, поскольку все они понимают и используют формат XML;

□ XML — обычный текстовый формат. При представлении данных в XML не используется двоичное кодирование, а это обеспечивает возможность передачи данных через любой протокол, например, через HTTP.

При разработке информационных систем вам, как программистам, не понадобиться знание структуры формата XML. ADO.NET автоматически выполнит преобразование данных в XML и из XML-формата так, как потребуется в текущий момент. Вы же будете взаимодействовать с данными путем использования обычных приемов программирования (через свойства и методы объектов).

Сравнение ADO.NET и ADO

Чтобы лучше понять особенности ADO.NET, сравним этот объект с уже известным нам объектом доступа к данным — ADO.

Строка соединения

Первое свойство, которое необходимо определить для установления связи с базой данных — ConnectionString. Это текстовая строка, которая содержит набор элементов типа атрибут=значение атрибута и служит для определения типа провайдера, имени источника данных (DataSource), имени базы данных (Database), идентификатора пользователя (Userid), пароля доступа (Password), используемой системы безопасности и т. п. Эта строка может выглядеть, например, следующим образом:

MyConnection="Provider=SQLOLEDBl;DataSource=MySQLServer; InitialCataloq=NORTHWIND; Integrated Security=SSPI"

Перечисленные атрибуты задаются в свойстве ConnectionString объекта, обеспечивающего связь с базой данных (SqlConnection или OleDbConnection). Кроме того, можно также установить свойство ConnectionString в не связанном с приложением udl-файле (Microsoft Data Link file, файл связи данных от Microsoft).

Открытие и закрытие соединения

Объекты Connection имеют два базовых метода для открытия и закрытия соединения (Open и Close). Метод Open использует информацию из свойства ConnectionString, чтобы обратиться к источнику данных и открыть (установить) связь. Метод Close закрывает открытое соединение. Закрытие связи приложения с базой данных является очень важным событием. В этот момент освобождаются ценные системные ресурсы, и база данных может обслуживать нового пользователя (количество обслуживаемых пользователей ограничено). Такая экономия особо актуальна для Интернет-приложений, где количество обслуживаемых клиентов может достигать нескольких сотен и тысяч.

Если вы используете объекты DataAdapter или DataCommand, то нет необходимости явно открывать и закрывать соединение. Когда вызываются методы этих объектов (например, Fill или Update), то автоматически делается проверка — открыто ли соединение. Если нет, DataAdapter сам откроет соединение, выполнит свои функции и снова закроет соединение. Методы, такие как Fill, открывают и закрывают соединение автоматически только в том случае, если оно не было открыто. Если при вызове подобных методов соединение уже открыто, то оно используется и не закрывается после отработки методов. Такая стратегия дает возможность разработчикам самостоятельно управлять состоянием соединения. Это требуется в тех случаях, когда несколько объектов DataAdapter используют один объект Connection. Тогда более эффективно принудительно открыть соединение и оставлять его открытым, пока не отработают методы всех объектов DataAdapter, после чего принудительно закрыть соединение.

Пул соединений

В Web-приложениях часто множество различных пользователей могут обращаться к одной и той же базе и запрашивать одни и те же данные. В этих случаях исполняемое приложение может создать пул соединений к источнику данных.

Примечание

Пул — объект или физическое устройство, обеспечивающее доступ множества клиентов к одному источнику данных или к другому физическому устройству. В результате пул, как один объект соединения, обслуживающий множество клиентов, занимает в памяти сервера значительно меньше места, чем если бы было создано отдельное соединение для каждого клиента.

Если используется класс OleDbConnection, то пул соединений формируется автоматически провайдером, так что разработчик освобождается от управления этим процессом. Если используется класс SqConnection, то создание пула соединений также обеспечивается, но программист имеет возможность вмешиваться в его управление.

Транзакции

Объекты Connection поддерживают транзакции с помощью метода BeginTransaction, который создает объект OleDbTransaction или SqlTransaction. Объекты Transaction в свою очередь поддерживают методы, которые позволяют вам завершить транзакцию (Commit) или сделать "откат" назад (Rollback).

1.3.5. Конфигурирование свойств Connection

Во многих приложениях содержимое объекта Connection не может быть однозначно определено на этапе разработки проекта. Например, в приложении, которое будет распространяться среди множества клиентов, в Connection не могут быть жестко прописаны такие параметры, как имя сервера, имя пользователя или пароль пользователя. У каждого потребителя программного продукта значения этих атрибутов будут свои. Следовательно, содержимое свойства ConnectionString должно формироваться динамически при запуске приложения. Поскольку динамические свойства соединения заносятся и хранятся в отдельном конфигурационном файле, который не компилируется, то они могут быть впоследствии изменены без перекомпиляции приложения. Динамические свойства автоматически получают значения из конфигурационного файла во время выполнения приложения. За работу этого механизма отвечает среда.NET Framework.

Сохранение элементов строки ConnectionString (таких как, например, имя сервера, имя пользователя и пароль) как динамических свойств может иметь смысл и для повышения безопасности вашего приложения.

1.3.6. Объект Connection и безопасность

Поскольку открытие соединения дает доступ к очень важному ресурсу сервера — базе данных, то становятся актуальными вопросы обеспечения безопасности и конфигурирования уровня безопасности.

Как вы будете обеспечивать безопасность приложения и порядок доступа из него к источнику данных зависит от архитектуры разрабатываемой системы. В Web-приложениях, например, пользователи обычно получают анонимный доступ к Internet Information Services (IIS), и поэтому не предоставляют никаких сертификатов на право пользования информацией. В этом случае, ваше приложение должно обеспечивать собственную проверку прав входа в систему, чтобы дать "добро" на открытие соединения и обращения к базе данных. Имя пользователя и пароль могут быть или "прошиты" в откомпилированном приложении (в виде значения свойства, установленного во время разработки), или могут быть определены как динамические свойства, которые установлены в файле конфигурации Web-приложения. Двоичные файлы Web-приложения и файл конфигурации защищены от доступа из сети Интернет собственными средствами защиты ASP.NET, которые предотвращают доступ к этим файлам через любой Интернет-протокол (гипертекстовый транспортный протокол — HTTP, протокол передачи файлов — FTP, и так далее). Чтобы предотвратить доступ к Web-серверу из вашей внутренней сети, необходимо использовать возможности защиты Windows.

В Интранет или в двухуровневых приложениях вы можете использовать интегрированную защиту — средствами Windows, IIS и SQL-сервером. В такой модели защиты для обращения к ресурсам базы данных используются параметры идентификации пользователя в сети, а не имя и пароль, заданные в строке соединения. При этом права доступа к информации устанавливаются на сервере базы данных через группы пользователей, так что нет необходимости установить индивидуальные параметры разрешения для каждого пользователя, который мог бы обратиться к базе данных. В данной модели вообще не нужно сохранять параметры соединения, и нет необходимости в принятии дополнительных мер по защите параметров строки соединения.

1.3.7. Создание объекта Connection в режиме дизайнера с помощью Server Explorer

Проводник Server Explorer обеспечивает наиболее простой путь создания соединения с источниками данных в режиме дизайнера на этапе проектирования приложения. Здесь программист имеет возможность просмотреть все доступные источники (базы) данных; увидеть таблицы, столбцы и многие другие элементы, а также редактировать и создавать новые элементы базы данных.

Ваше приложение непосредственно не использует соединения, созданные этим путем. И вообще информация, поставляемая соединением в режиме дизайнера при проектировании приложения, используется для того, чтобы задать свойства нового объекта Сonnection, который вы добавите к вашему приложению. Иными словами объекты Сonnection, с которыми вы работаете в окне Server Explorer, являются элементами Server Explorer и служат шаблонами для создания объекта Сonnection, который будет являться элементом формы и реально работать в вашем приложении.

Например, во время разработки вы задействовали Server Explorer для создания связи (объекта Connection) С SQL-сервером с именем MyServer и базой данных Northwind, которая поставляется вместе с SQL Server. Затем, при проектировании формы, через это соединение вы можете просмотреть структуру базы данных Northwind, выбирать таблицы, выделять нужные вам столбцы и перетаскивать их на форму. Как раз в момент "перетаскивания" элементов из базы данных на проектируемую форму будут автоматически сформированы объекты Connection и DataAdapter. В новое соединение скопируется информация из СonnectionString соединения-шаблона проводника Server Explorer. Когда разработанное приложение будет запущено на выполнение, то объект Connection, расположенный на форме (а не в Server Explorer) будет реально обеспечивать соединение вашего приложения с источником данных.

Информация о соединениях в режиме проектирования приложений храниться на вашем локальном компьютере и не зависит от загруженного в данный момент проекта. Поэтому, как только вы загрузили в Visual Studio какой-либо проект, активизируется объект Connection режима проектирования приложений — и вы видите доступные базы данных в проводнике Server Explorer.

1.3.8. Инструменты Visual Studio для создания объектов Connection

Программистам при работе с Visual Studio нет необходимости "руками" формировать свойства объектов connection. Для этого есть соответствующие инструментальные средства — например, Мастер Адаптера Данных, который запрашивает у разработчика информацию относительно источника данных и автоматически создает объект Connection на форме или на другом компоненте, с которым вы работаете. Однако при желании разработчик можете сам добавить объект Connection на форму или другой компонент и задать нужный набор свойств.

1.3.9. Создание объекта Connection в ADO.NET

Для создания объекта connection можно использовать следующие возможности:

□ Мастера Visual Studio:

• Мастер конфигурации объекта DataAdapter. Этот мастер создает Connection, как элемент, необходимый для формирования DataAdapter;

• Мастер форм данных — данный мастер создает Connection как часть формы, которую он формирует.

□ Путь переноса таблицы, выбранных столбцов таблицы или хранимой процедуры из Server Explorer на форму. При перемещении одного из этих элементов на форму будут автоматически созданы объекты Connection и DataAdapter.

□ Создание автономного объекта Connection. В этом варианте создается объект Сonnection на форме или компоненте, свойства которого вы конфигурируете вручную. Данный способ можно использовать и тогда, когда вы предпочитаете устанавливать свойства объекта в окне Properties.

□ Создание объекта Сonnection во время работы программы.

Для создания автономного объекта connection нужно выполнить следующие действия.

1. Создайте Windows- или Web-приложение.

2. Из вкладки Data панели инструментов Toolbox поместите объект Сonnection на вашу форму или компонент. Для этого левой кнопкой мыши выделите объект OleDbConnection или SqlConnection (рис. 1.5), затем щелкните левой кнопкой мыши в любом месте формы.

• Используйте объект SqlConnection, если вы будете работать с базой данных SQL Server версии 7.0 и выше. При этом будет создан объект Connection с именем SqlConnectionN, где N — последовательный номер (например, SqlConnection1).

• Используйте объект OleDbConnection, если вы будете работать с любым другим источником данных, или если тип источника данных впоследствии может измениться. При этом будет создан объект Connection с именем OleDbConnectionN, где N— последовательный номер (например, OleDbConnectioni).

3. Выделите объект Connection в окне дизайнера, затем в окне Properties модифицируйте значение свойства ConnectionString. Здесь вы можете установить или изменить такие свойства как DataSource, Database, UserName и так далее (вы не сможете переопределить атрибут Provider для объекта SqlConnection).

Если вы хотите переименовать объект Сonnection — измените его свойство Name.

Если параметры объекта connection должны быть переустановлены во время выполнения приложения, то необходимо сконфигурировать свойства объекта connection как динамические. Для этого в окне Properties раскройте узел DynamicProperties и щелкните в поле в правой части строки Connectionstring (рис. 1.6).

В открывшемся дополнительном окне Dynamic Propertys установите флажок Map property to a key in configuration file и нажмите кнопку OK (рис. 1.7).

 

В результате свойства строки соединения будут помещены во внешний конфигурационный файл, и их впоследствии можно будет менять без перекомпиляции приложения.

Листинг 1.1

' Visual Basic

titleKeyword="%" & txtTitleKeyword.Text & "%"

OleDbDataAdapterl.SelectCommand.Parameters(1).Value=titleKeyword

OleDbDataAdapterl.SelectCommand.Parameters("Title_Keyword").Value =titleKeyword

 

// C#

string titleKeyword="%"+txtTitleKeyword.Text+"%";

this.OleDbDataAdapterl.SelectCommand.Parameters[1].Value=titleKeyword;

this.OleDbDataAdapterl.SelectCommand.Parameters["Title_Keyword"].Value=titleKeyword;

Здесь в первом случае программа присваивает значение параметру, ссылаясь на его номер в коллекции — 1, во втором случае — на его имя. Использование имени параметра в практике программирования более предпочтительно, чем индекса. При использовании имени уменьшается потребность в переписывании кода, если в ходе работы над проектом вдруг меняется количество параметров, а также отпадает необходимость помнить, возвращает ли хранимая процедура значение.


Для того чтобы получить доступ к имеющейся коллекции параметров, нужно в окне Properties найти свойство Parameters для интересующей вас команды. Например, на рис. 1.10 представлена строка доступа к параметрам команды адаптера данных InsertCommand для таблицы Customers базы данных Northwind.

 

Если щелкнуть кнопку на поле (Collection) в строке Parameters, то откроется диалоговое окно редактирования свойств коллекции параметров (рис. 1.11). В этом окне разработчик приложения имеет возможность изменить перечень параметров и их атрибуты. В левой части окна представлена созданная по умолчанию коллекция параметров с указанием их имен и индексов, в правой части окна – свойства каждого параметра.

 

Установление значений параметров

Есть два способа, с помощью которых можно задать значения параметров:

□ явным заданием значений параметрам через свойство Value;

□ располагая (добавляя) параметры в колонки таблицы объекта DataSet.

Вы устанавливаете значения параметров явно, когда заполняете набор данных или вызываете команду (для параметров выбора). Например, в примере поиска книг, приведенного выше, в приложении есть текстовое поле, в которое пользователь вводит ключевое слово (название книги). В этом случае можно явно установить значение параметра, привязав его к свойству Text тетового поля перед вызовом метода Fill объекта DataAdapter. Пример программного кода такого способа приведен в листинге 1.2.

Листинг 1.2

' Visual Basic

titleKeyword="%" & txtTitleKeyword.Text & "%"

OleDbDataAdapterl.SelectCommand.Parameters("Title_Keyword").Value =titleKeyword

OleDbDataAdapterl.Fill(dsAuthorsl)

 

// C#

titleKeyword="%"+txtTitleKeyword.Text+"%";

this.OleDbDataAdapterl.SelectCommand.Parameters["Title_Keyword"].Value=titleKeyword;

this.OleDbDataAdapterl.Fill(dsAuthorsl);

Параметры должны получить значения и в случаях обновления данных. Когда вызывается метода Update объекта DataAdapter, то осуществляется просмотр всех записей таблицы набора данных DataSet, и модификация записей базовой таблицы (Update, Insert, Delete) происходит на основе значений, полученных из соответствующих колонок каждой записи. То есть параметры получают свои значения из колонок записи набора данных DataSet. Например, если в таблице объекта DataSet была добавлена новая запись и активизирована команда InsertCommand на вставку строки в основную таблицу базы данных, то значения параметров для предложения INSERT этой команды будут считаны из колонок той записи, которая была добавлена в таблицу объекта DataSet. Таков типичный сценарий работы команд обновления данных, но не единственный. Хранимые процедуры тоже могут возвращать данные через коллекцию параметров или через возвращаемое значение. В этом случае возвращенные значения должны быть "привязаны" к соответствующим колонкам таблицы набора данных DataSet.

Параметры обновления также возможно задать явно. Объект DataAdapter поддерживает событие RowUpdating, которое вызывается каждый раз, когда происходит обновление записи. Вы можете создать обработчик данного события и в нем явно присвоить параметрам нужные значения. Это обеспечивает жесткий контроль над значениями параметров и позволяет переназначать их динамически в ходе работы программы непосредственно перед обновлением записи в таблице исходной базы данных.

1.4.5. Свойство TableMappings объекта DataAdapter

Когда DataAdapter считывает записи из источника данных, должно быть определено, как разместить полученную информацию в соответствующей таблице объекта DataSet. Это определяется схемой таблицы (table mapping). В такой схеме связываются между собой имена колонок таблицы источника данных с именами колонок таблицы набора данных DataSet. Например, информация из колонки с именем au_id в таблице источника данных может принадлежать колонке с именем author_id_number в таблице объекта DataSet.

По умолчанию, когда Visual Studio генерирует объект DataSet, элементы набора данных (таблицы и колонки) имеют те же самые имена, что и в источнике данных. Однако в некоторых ситуациях имена в источнике данных и наборе данных DataSet могут не совпадать.

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

□ Разработчик изменил имена элементов набора данных для удобочитаемости, для перевода наименований с одного языка на другой или подругой причине.

Сформировать или модифицировать структуру таблицы можно, используя свойство TableMappings адаптера данных, которое включает в себя коллекцию элементов DataTableMapping. Есть только один объект DataTableMapping для каждой отображаемой таблицы, потому что DataAdapter связывает только единственную исходную таблицу и единственную таблицу набора данных. Доступ к этому свойству можно получить из окна Properties объекта DataAdapter (рис. 1.12).

 

При нажатии на кнопку в поле (Collection) свойства TableMappings появляется диалоговое окно, позволяющее редактировать элементы коллекции DataTableMapping (рис. 1.13). Здесь содержатся свойства для идентификации таблицы источника данных и таблицы набора данных, а так же свойство ColumnMappings, содержащее элементы, которые представляют колонки соответствующих таблиц.

Когда происходит вызов метода Fill объекта DataAdapter, то выполняются следующие действия, в результате которых таблица объекта DataSet заполняется данными.

1. Адаптер данных ищет название каждого столбца исходной таблицы в объекте TableMappings.

2. Когда адаптер данных находит название столбца исходной таблицы, то получает название соответствующего ему столбца таблицы набора данных.

3. Получив имена этих двух столбцов, DataAdapter переносит данные от исходного столбца базовой таблицы в соответствующий столбец таблицы набора данных DataSet.

Есть две причины, которые могут воспрепятствовать данному процессу.

□ Не найдена информация об исходном столбце. Это может произойти потому, что он не описан в схеме таблицы (например, разработчик изменил структуру исходной таблицы базы данных после того, как был сформирован объект DataAdapter).

□ Столбец, в который нужно переместить данные, не определен в схеме набора данных.

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

Свойство MissingMappingAction позволяет определить, какое действие адаптер должен выполнить, если в схеме данных отсутствуют некоторые параметры. Данное свойство имеет следующие значения:

□ Passthrough — адаптер пытается загрузить данные исходного столбца в столбец с тем же именем набора данных. Если в наборе данных нет столбца с аналогичным именем, поведение программы в дальнейшем будет зависеть от параметров свойства MissingSchemaAction (см. ниже);

□ Ignore — столбцы, которые должным образом не описаны в схеме, не загружаются данными и остаются пустыми;

□ Error - генерируется ошибка.

Свойство MissingSchemaAction позволяет определять действия, которые должны быть выполнены в случае, когда адаптер не находит соответствующий столбец для записи данных. Возможные следующие значения:

□ Add — таблица или столбец добавляются к схеме и к набору данных;

□ AddWithKey — таблица или столбец добавляются к набору данных и к схеме, причем добавленный столбец делается ключевым;

□ Ignore — таблица или столбец, не представленные в схеме набора данных не добавляются к набору данных;

□ Error — генерируется ошибка.

Необходимо установить оба этих свойства, чтобы обеспечить устойчивость работы приложения. Например присвоение свойству MissingMappingAction значения Passthrough и свойству MissingSchemaAction значения Add обеспечит эффект автоматического дублирования таблицы источника в наборе данных DataSet.

Можно настроить свойства таким образом, что приложение будет генерировать ошибку, если есть какое-то несоответствие между базовой таблицей и схемой набора данных, что предотвратит некорректную обработку информации.

Если задается режим игнорирования ошибки, то обеспечивается гарантированная загрузка тех данных, которые явно определены в схеме или отображены в свойстве TableMappings. Это полезно использовать тогда, когда адаптер данных обращается к хранимой процедуре или SQL-запросу, которые возвращают больше столбцов, чем определено в наборе данных DataSet.

1.4.6. Создание объекта DataAdapter

Объект DataAdapter может быть создан следующими способами:

□ с использованием Server Explorer;

□ с использованием мастера;

□ вручную.

Рассмотрим все эти возможности.

Создание объекта DataAdapter с использованием Server Explorer

Для создания объекта DataAdapter с использованием Server Explorer постройте Windows или Web-приложение, а затем выполните следующие действия.

1. Создайте или откройте форму в соответствующем приложении, активизируйте окно дизайнера формы и перейдите в окно Server Explorer.

2. Если нужный вам объект Connection отсутствует, то создайте его.

3. Откройте объект Connection и войдите в нужный вам элемент этого объекта (Tables, Stored Procedures, Views или Functions). Если, например, вам нужна не вся таблица, а только некоторые колонки, то раскройте следующий уровень и получите доступ к набору колонок таблицы.

4. Выберите одну или более колонок таблицы или хранимой процедуры и перетащите их мышью в окно дизайнера формы (рис. 1.14).

После этого Visual Studio автоматически создаст два объекта Connection и DataAdapter (рис. 1.15).

 

 

Если в качестве источника информации использовалась таблица базы данных, то в объекте DataAdapter будут сформированы команды для чтения и обновления данных. Если в качестве источника была взята хранимая процедура, то будут сформированы команды только для чтения данных.

Перетаскивание элементов данных из окна Server Explorer на проектируемую форму наиболее легкий путь создания объекта DataAdapter, однако он не дает возможности создать параметризованный запрос или новые хранимые процедуры. Для этого можно использовать мастер Data Adapter Configuration Wizard.

Создание объекта DataAdapterc использованием мастера

Мастер Data Adapter Configuration Wizard обеспечивает достаточно простой и самый гибкий способ создания адаптера данных.

Для создания объекта Data Adapter с помощью мастера постройте Windows или Web-приложение (см. соответствующие разделы глав 2 и 3) и выполните следующие действия.

1. Создайте или откройте форму в соответствующем приложении и активизируйте окно дизайнера формы.

2. Из вкладки Data окна Toolbox перенесите объект OleDbDataAdapter илиSqlDataAdapter в область дизайнера формы (рис. 1.16).

После этого Visual Studio добавит соответствующий объект DataAdapter к форме и запустит мастер Data Adapter Configuration Wizard.

3. В мастере последовательно выполняются следующие шаги:

• На второй странице (рис. 1.17) создайте или выберите существующий объект Connection.

• На третьей странице (рис. 1.18) определите, должен ли адаптер данных использовать SQL-запрос или хранимую процедуру (значения переключателей приведены в табл. 1.1).

 

 


Таблица 1.1. Значения положений переключателя способа получения записей из базы данных объектом DataAdapter

 

Переключатель Описание
Use SQL statement Создается SQL-запрос на основе предложения SELECT, который DataAdapter будет использовать для заполнения данными результирующей таблицы объекта DataSet, а также мастер сгенерирует запросы на основе предложений update, insert и delete для обновления данных в исходной таблице базы данных
Use newly created stored procedures Определяется запрос на основе предложения SELECT, и мастер создает хранимую процедуру для чтения и обновления источника данных. Если поставщик данных не поддерживает этот параметр, то он будет недоступен
Use existing stored proce dures Определяется существующая хранимая процедура, которую DataAdapter будет использовать для чтения и обновления источника данных

Что появится в следующей странице мастера, будет зависеть от сделанного выбора (в данном случае мы выберем переключатель Use SQL statement).

• На четвертой странице (рис. 1.19) создается запрос на выборку данных с предложением SELECT.

На этой странице можно либо просто набрать текст SQL-запроса, либо использовать мастер построения запросов, для запуска которого необходимо нажать кнопку Query Builder. При вызове мастера построения запросов появится дополнительное окно (рис. 1.20) с предложением выбрать одну из таблиц базы данных.

В построителе запросов можно выбрать требуемую таблицу, указать перечень необходимых колонок, сконфигурировать параметры запроса, задать условия сортировки. Можно также выполнить запрос и посмотреть возвращаемые им данные (рис. 1.21).

После нажатия кнопки ОК мастер завершит свою работу, а текст построенного запроса будет передан мастеру конфигурирования адаптера данных (рис. 1.22).

Нажав на кнопку Next, мы перейдем на информационную страницу мастера (рис. 1.23), где выведен перечень элементов, созданных в результате работы мастера. Если мастеру, по каким-либо причинам не удалось создать некоторые элементы, они будут помечены соответствующими

 

 

предупреждающими значками. В нашем случае против каждого элемента стоит отметка о его успешном создании.

Когда мастер закончит свою работу кроме объекта DataAdapter будет построен и объект Connection, который был определен на второй странице мастера.

Если вы хотите изменить название объектов DataAdapter и connection, выберите мышью нужный объект и задайте удобное для вас имя в окне Properties.

Если вы хотите посмотреть, какие данные DataAdapter перенесет в набор данных Dataset, то можно запустить мастера предварительного просмотра данных. Для этого нужно в меню Data выбрать пункт Preview Data и в открывшемся диалоговом окне Data Adapter Preview нажать кнопку Fill Uataset (рис. 1.24).

Вы также имеете возможность переконфигурировать адаптер DataAdapter вручную. Для этого нужно модифицировать схему данных. Выполнение такой процедуры рассматривается в следующем разделе.

Создание и конфигурирование объекта DataAdapter вручную

Вы можете создать объект DataAdapter вручную, без использования соответствующего мастера. Независимо от того, когда и каким способом был создан DataAdapter, всегда имеется возможность изменить его конфигурацию.

Для создания объекта DataAdapter вручную вам необходимо выполнить следующие действия.

1. Убедитесь, что объект Connection создан и расположен на проектируемой форме или компоненте.

2. Из вкладки Data окна Toolbox перенесите объект OleDbDataAdapter или SqlDataAdapter в область дизайнера формы. Visual Studio добавит соответствующий объект DataAdapter к форме и запустит мастер DataAdapter Configuration Wizard.

3. Закройте мастера Data Adapter Configuration Wizard.

Процесс ручного конфигурирования объекта DataAdapter заключается в следующем.

1. Выделите мышью объект DataAdapter и перейдите в окно Properties, где можно сформировать команды, позволяющие читать и обновлять данные. В первую очередь необходимо сформировать объект SelectCommand (рис. 1.25). Если DataAdapter будет использоваться и для модернизации таблицы источника данных, то также необходимо сформировать объекты UpdateCommand, DeleteCommand, InsertCommand.

Для каждого объекта Command необходимо задать следующие свойства (табл. 1.2).

Таблица 1.2. Свойства объекта Command

 

Свойство

Описание

ActiveConnection Устанавливает ссылку на объект Connection. Кроме того, мож-  
  но создать новый объект Connection в свойстве  
  ActiveConnection окна Properties. Как правило, все объекты  
  Command используют один и тот же объект connection. Однако  
  вы имеете возможность использования различных объектов  
  Connection для каждого из объектов Command  
CommandText Содержит текст SQL-запроса или имя хранимой процедуры. Для  
  некоторых провайдеров возможно создание мультизапроса или  
  хранимой процедуры с несколькими инструкциями, разделен-  
  ными точкой с запятой (;). Эти инструкции выполняются после-  
  довательно. Это полезно для ситуаций, когда после добавления  
  или удаления записей нужно повторно получить из базы данных  
  обновленную информацию  
CornmandType

Тип команды в свойстве CommandText. Может принимать следующее значения:

Text — текст SQL-запроса

 

StoredProcedure — хранимая процедура

 

TableDirect — имя таблицы

Parameters

Коллекция объектов Parameter, через которые значения параметров передаются команде. В объекте SelectCommand создается коллекция параметров только в том случае, если команда возвращает не все записи исходной таблицы. Объекты UpdateCommand, InsertCommand И DeleteCommand всегда требуют определения параметров



Поделиться:


Последнее изменение этой страницы: 2020-12-09; просмотров: 151; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.105.105 (0.168 с.)