Введение.

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

В ADO .NET для непосредственного контакта с данными используются только обьекты Command, DataReader и иногда DataAdapter. Обьект DataAdapter - это преобразователь данных из формата DataReader в формат данных, хранимый в обьекте DataSet. Обьект DataSet - это существенно расширенный RecordSet из ADO, теперь он не контактирует с базой непосредственно. Он имеет внешний XSD-файл с описанием своей структуры и умеет напрямую читать/писать во внешние XML-файлы. Данные сначала читаются в DataReader, а уже оттуда методом FILL обьекта DataAdapter перегружаются в DataSet. В DataSet их можно посортировать и отфильтровать с помощью обьекта DataView, выполнить связывание с массивами VisualBasic или отобразить на формах с помощью обьектов DataGrid или других. А вот обратно в базу данные перегружаются методом UPDATE обьекта DataAdapter или обьектом DataCommand.


Теперь еще раз - зачем сделано так сложно и почему обьектом RecordSet из ADO или его расширенным аналогом DataSet из ADO .NET нельзя прямо читать/писать в базу. Дело в том, что SQL-сервер - штука очень универсальная, подходящая на все случаи жизни и кто работал с ней - знает - как она грузит процессор даже безо всяких ADO. А ADO полностью повторяет фунциональность SQL-сервера как в части множества различных видов курсоров, так и в части множества различных типов блокировок да еще и добавляет свою. Это получается очень сложно в плане обработки блокировок для прикладного программиста, очень сложно писать драйвера ADO для разных новых СУБД, и особенно напряжно для сервера в случае расположения курсоров всех юзеров на сервере. Плюс само ADO еще постоянно добавляет свои запросы чтобы считать схему базы данных. Короче сервер под ADO конкретно тормозит - 10 юзеров и серверному курсору - жопа. На клиентском курсоре - от силы до сотни юзеров (а DAO из Access даже на 10 юзерах просто делает что-то свое и выводится из транса только кнопкой Reset). Плюс в ADO не поддерживаются кластеры серверов, XML и многие другие современные вещи. А как же писать электронную коммерцию, интернет-магазины с миллионами корзин? Вот поэтому в ADO .NET и были отброшены все навороченные приблуды SQL и ADO (хотя иногда так приятные и удобные) и оставлен только единственный вид курсора READONLY и FORWARDONLY. Так можно делать сразу десятки тысяч коннектов к северу - и он не тормозит. Ну и конечно, второй момент кроме производительности - теперь XML органически поддерживается в .NET - и основные XML-методы добавлены именно в DataSet. Но зато теперь DataSet полностью изолирован от базы данных.


1.Чтение данных.

Для начала разберемся как выполнить самый простой запрос к базе. В любом случае первый этап - создать обьект Connections. Для этого кидаем на форму коннект с сервером из Server Explorer или со вкладки Data (но тогда надо еще настраивать ConnectionString.) При выборе же нового коннекта (которого еще нет в Server Explorer) выдается стандартное окно коннекта к базе.

Дальше есть три пути:


Теперь рассмотрим работу с помощью обьекта Command. Для начала надо связать обьект Command c обьектом Connections и ввести текст команды. В обьекте Command можно еще создать параметры SQL-запроса для вызова хранимой процедуры. Весь код, который создал Web-дизайнер седьмой студии из наших движений мышкой c обьектами Command и Connection можно посмотреть здесь.

У обьекта Command есть 4 основных метода:

т.е. собственно прога для скалярных запросов к базе с помощью обьекта Command будет выглядеть не длиннее, чем чтение DataReader'ом:
SqlConnection1.Open()
SqlCommand1.Connection = SqlConnection1
SqlCommand1.CommandText = "select count (*) from price"
TextBox.Text = SqlCommand1.ExecuteScalar

DataAdapter - это специальный обьект, заточенный на подготовку данных для основного способа хранения данных в памяти в .NET - в обьекте DataSet. Посмотрим, как работает мастер DataAdapter Wizard:

Кидаем на форму DataAdapter. Начинает работать DataAdapter Wizard. Справа идет подсказка:

После выполнения Generate Dataset на форме появляется собственно Обьект DataSet1. DataSet имеет тоже два пункта в подсказке:

Все, что сделано этим мастером можно посмотреть в коде, созданном Дизайнером.

В принципе, Dataset довольно сложный обьект, состоящий из коллекций DataTable и DataRelation. В принципе, обьект DataTable является непосредственным аналогом обьекта RecordSet - только непосредственный контакт с данными у него отсутствует. Данные, хранимые в DataTable можно сортировать и фильтровать обьетом DataView.

В свою очередь обьект DataTable тоже имеет сложную структуру, и не только позволяет перебирать записи по RS.MoveNext, как в ADO, но и напрямую загружать/выгружать данные в XML. DataSet бывают двух типов - Typed и UnTyped. Первые хранят схему данных, из-за чего имеют подсказку в студии, доступ к полям по именам (как в АДО) и прочий сервис. Вторые никаких сервисов не имеют - но работаю на порядок быстрее. В состав студии входит специальный XML-редактор внутренннй структуры обьекта Dataset - XSD-файла. Через свойство DataSource, в котором устанавливается ссылка на обьект DataSet, визуальные компоненты .NET поддерживают привязку к данным.



2.Отображение данных.

До этого момента были рассмотрены только внутренние структуры ADO.NET, вообще никак не связанные с отображением данных на форме. Они лишь принимают данные из базы и хранят считанные/модифицированные данные у себя. А отображение данных из обьекта Dataset на WEB-формах можно выполнить хоть командой бейсика Print.

По готовому обьекту DataSet проще всего запустить мастер отображения данных на форме. Этот мастер создает код с использованием обьекта DataGrid. Еще одна распространенная в .NET сетка для отображения данных - ComponentOne FlexGrid. Эта сетка ходит с креками на всех пиратских компактах и имеет гораздо больше возможностей, чем стандартный DataGrid от Микрософт. Кроме сетки на этих же компактах распространяется много других отличных .NET-компонентов.

Для отображения данных можно также использовать специализированный обьект CristalReportViewer со своим мастером и отдельной формой.


3.Привязка данных.

Имея обьект DataSet сданными, можно выполнить отображение данных не только вручную, но с помощью привязки данных к элементам ASP-страниц, которые для этого предоставляют несколько специальных свойств. Привязку поддерживают следующие обьекты отображения данных:

Еще про привязку есть семь и еще отдельная статья в MSDN.


4.Обновление данных.

Обновления можно выполнить двумя путями - через обьект Command или через DataAdapter.


5.Сортировка и фильтрация данных.

C помощью обьекта DataView данные в DataSet можно перетусовать или отредактировать как угодно.

6.Примеры.



7.Что дает понимание ADO.NET

Написание за пару дней вот таких форм:




Comments ( )
<00>  <01>  <02>  <03>  <04>  <05>  <06>  <07>  <08>  <09>  <10>  <11>  <12>  <13>  <14>  <15>  <16>  <17>  <18>  <19>  <20>  <21>  <22>  <23
Link to this page: //www.vb-net.com/dotnet/tour10/index.htm
<SITEMAP>  <MVC>  <ASP>  <NET>  <DATA>  <KIOSK>  <FLEX>  <SQL>  <NOTES>  <LINUX>  <MONO>  <FREEWARE>  <DOCS>  <ENG>  <CHAT ME>  <ABOUT ME>  < THANKS ME>