Доступ к данным пользователя - 11 Февраля 2010 - Лекции
Четверг, 08.12.2016, 05:07
Приветствую Вас Гость | RSS

Лекции

Меню сайта
Форма входа
Категории раздела
ТАУ (Теория автоматического управления) [31]
лекции по ТАУ
Экология [151]
учебник
Бухгалтерский учет и налогообложение в строительстве [56]
Дементьев А.Ю. - Практическое пособие
Психология [104]
Пип
информатика [80]
с# Карли Ватсон
современные стулья [0]
новинки
Поиск
Главная » 2010 » Февраль » 11 » Доступ к данным пользователя
00:42
Доступ к данным пользователя
Доступ к данным пользователя
Начиная с главы 3, в которой было введено понятие переменных и буквенных
значений, мы уже осуществляли манипуляции с данными в С#. Однако до настоя-
щего момента мы использовали только те данные, которые были "зашиты" в про-
граммах. Если такие данные изменялись, то нам приходилось вносить изменения
непосредственно в саму программу. В настоящей главе мы собираемся рассмот-
реть то, каким образом можно осуществлять доступ к данным, хранящимся за пре-
делами программ — в базах данных, распределенных документах и т. д.
Основное содержание любого бизнес-приложения — его данные. В любой
компании хранятся данные, которые касаются ее служащих,— зарплата и выпол-
няемая работа, информация о заказчиках и т. д. Большинству программ, которые
вы будете писать в дальнейшем, будет требоваться осуществляемый тем или иным
способом доступ к этим внешним данным независимо от того, является ли ваше
приложение небольшой поисковой программой, позволяющей персоналу компании
вводить и редактировать информацию о служащих в базе данных компании, или это
полномасштабный web-сайт для ведения электронной коммерции (e-commerce),
где активно используется каталог продукции и информация о заказчиках, напри-
мер, номера их кредитных карточек и адреса доставки, которая хранится в базе
данных на сервере.
В .NET Framework предусмотрен специальный набор объектов, находящихся
в пространстве имен system.Data, которые обеспечивают возможность относитель-
но простого доступа ко всем данным такого рода. В совокупности такие объекты
известны под названием ADO.NET (это имя происходит от предшествующей тех-
нологии доступа к данным, которая называется ActiveX Data Objects — объекты
данных ActiveX). ADO.NET будет подробно рассматриваться в следующей главе,
а эта глава посвящена изучению того, как можно заставить Visual Studio.NET вы-
полнять практически всю черновую работу за нас. Мы воспользуемся мощными
возможностями Visual Studio (VS) для написания приложений, обрабатывающих
данные. Это позволит познакомиться с наиболее важными понятиями, относящи-
мися к работе с базами данных, использование которых позволяет обходиться без
написания больших объемов кода. Если вы из тех, кто обожает писать код страни-
цу за страницей, чтобы выполнить даже самое простое задание, то эта глава не
для вас! А вот тем из вас, кто получает удовольствие, когда работа оказывается
сделанной качественно и быстро, мы говорим: "Добро пожаловать!".
Доступ к данным в VS
ADO.NET является достаточно емкой темой, которой может быть посвящена
отдельная книга, и прежде чем приступить к более детальному ее рассмотрению
в следующей главе, нужно достаточно подробно изучить основные понятия, которые
482 Глава 18
позволят двигаться дальше. ADO.NET основывается на предшествующих ей техно-
логиях доступа к данным и позволяет использовать их; поэтому начнем с рассмот-
рения ситуации, которая сложилась к моменту появления .NET.
Краткая история обеспечения доступа к данным
Когда были созданы самые первые БД, такие как Oracle и DB2 компании IBM,
каждому разработчику, которому требовался доступ к хранящимся в них данным,
приходилось использовать функции, специфические для конкретной базы данных.
Каждая система обладала собственной библиотекой функций, например, для Oracle
использовался Oracle Call Interface (OCI — интерфейс обращений к Oracle), а для
SQL Server компании SyBase (позже купленной компанией Microsoft) — библио-
тека DBLib. Это обеспечивало быстрый доступ к данным, поскольку программы из
этих библиотек работали с БД напрямую. С другой стороны, это означало, что
программисты должны быть знакомы с библиотеками для каждой БД, с которыми
им приходилось работать, поэтому задача написания приложений для работы
с данными была весьма сложна. Это также означало, что, если компания перехо-
дила на использование другой БД, приложения приходилось переписывать заново.
Эта проблема была решена с помощью Open Database Connectivity (ODBC —
открытая система связи с базами данных). Система ODBC была создана в нача-
ле 90-х гг. компанией Microsoft совместно с рядом других компаний и представля-
ла собой стандартный набор функций, которые разработчики могли применять при
работе с любыми базами данных. Эти функции транслировались в вызовы функ-
ций, присущих конкретной базе данных, с помощью драйверов, специфических для
этой базы данных.
Это позволило решить основные проблемы, вызванные существованием раз-
личных библиотек баз данных,— разработчикам теперь нужно было уметь пользо-
ваться только одним набором функций (функциями ODBC), и если компания
переходила от одной БД к другой, то все, что им приходилось изменять,— это код,
отвечающий за установление соединения с базой данных. При этом одна проблема
все равно оставалась нерешенной. Хотя "безбумажный офис" по-прежнему оста-
вался по большей части мифом, у компаний скопилось огромное количество пред-
ставленных в электронном виде данных, хранящихся в самых разнообразных
формах,— в виде электронных писем, web-страниц, файлов Project 2000 и т.п.
ODBC замечательно работала с данными в традиционных базах данных, но не
справлялась с другими типами данных, которые не хранились в виде аккуратных
столбцов и строк и у которых могла отсутствовать какая-либо связная структура.
Решение этой проблемы привело к появлению OLE DB. OLE DB работает
аналогично ODBC, представляя уровень абстракции между БД и приложениями,
которым требуется доступ к данным. Клиентские приложения взаимодействуют
с источником данных, который может представлять собой традиционную базу дан-
ных или любое другое хранилище информации, посредством провайдера OLE DB
ддя этого источника. Данные, извлекаемые из источника, представляются в прило-
жении в табличном формате — т. е. так, как будто они были извлечены из базы
данных. OLE DB позволяет осуществлять доступ к данным, которые представля-
ются существующими драйверами ODBC, и, таким образом,, может быть исполь-
зована для доступа к любым базам данных, поддерживающихся ODBC. ADO.NET
поддерживает и OLE DB, и ODBC весьма сходным образом.
Последняя технология доступа к данным, о которой необходимо упомянуть,—
это ActiveX Data Objects (ADO). ADO — это просто тонкий слой, который нахо-
дится над OLE DB и позволяет программам, написанным на языках высокого
уровня вроде Visual Basic, получать доступ к данным OLE DB.
Доступ к данным пользователя 483
Введение в ADO.NET
Хотя название ADO.NET и происходит от ADO, отличия между ними, на самом
деле, весьма существенны. С точки зрения архитектуры эта система даже ближе
к OLE DB. ADO.NET состоит из набора объектов, находящихся в пространстве
имен System.Data, которые взаимодействуют с базами данных посредством про-
вайдеров данных .NET. Объекты ADO.NET позволяют устанавливать соединения
с базами данных, а также извлекать, редактировать, уничтожать и вставлять дан-
ные в базы данных и, кроме того, осуществлять манипуляции с данными програм-
мным путем.
Провайдеры данных .NET
ADO.NET состоит из двух фундаментальных частей — объекта DataSet и про-
вайдера данных .NET. Объект DataSet используется для того, чтобы хранить
в программе набор данных, представленных в табличном виде; при этом совершенно
безразлично, откуда поступили эти данные. Провайдер данных состоит из набора
компонентов, специфических для конкретного источника данных, которые позволя-
ют устанавливать соединение и осуществлять взаимодействие с этим источником.
Каждый провайдер находится в собственном пространстве имен в рамках про-
странства имен System.Data. На момент написания настоящей книги существовало
три доступных провайдера данных:
• Провайдер данных для SQL Server. Он находится в пространстве имен
System.Data.Sgiciient и предназначается для работы с базами данных
SQL Server версий 7.0 и выше, а также с базами данных MSDE
(MSDE — это сокращенная версия SQL Server). Провайдер SQL Server
является составной частью .NET Framework. Если возникает необходимость
работы с базами данных SQL Server версий 6.5 или более ранних,
то следует использовать провайдер OLE DB.
• Провайдер данных для OLE DB. Он используется для установления
соединений с источниками данных посредством OLE DB и находится
в пространстве имен system.Data.oieDb. Так же, как и провайдер
SQL Server, провайдер OLE DB является составной частью
.NET Framework. Провайдер OLE DB не может использоваться
для установления соединений с базами данных посредством
драйверов ODBC.
• Провайдер данных для ODBC. Он может использоваться
для установления соединений с базами данных, обладающими
драйверами ODBC. Провайдер данных ODBC находится
в пространстве имен System.Data.odbc. Он может быть загружен
с web-сайта компании Microsoft, расположенного по адресу
http://download.microsoft.com/download/dasdk/
Beta/1.О.2914.58/W98NT42KMeXP/EN-US/odbc_net.ехе.
Хотя на настоящий момент имеется возможность непосредственно устанавливать
соединение только с БД SQL Server и MSDE, ожидается, что число доступных
провайдеров данных будет увеличиваться с ростом числа пользователей .NET.
Не так долго осталось ждать появления провайдера для Oracle. Но сейчас, при
необходимости установить соединение с каким-либо другим источником данных
вам придется воспользоваться либо OLE DB, либо ODBC.
484 Глава 18
Провайдеры данных состоят из четырех основных частей, описанных в следую-
щей таблице:
Имя компонента Описание
Connection Используется для установления соединения с БД или каким-либо другим
источником данных.
Command Используется для извлечения, редактирования, уничтожения и включения данных
в базу данных.
DataReader Обеспечивает поток данных из источника данных. Такие данные могут только
читаться (но не модифицироваться), и просмотр таких данных допускается только
в прямом направлении.
DataAdapter Используется для наполнения DataSet данными из источника данных, а также
для обновления источника данных при внесении любых изменений в DataSet.
При использовании этих объектов не происходит обращения к ним по этим
именам. Каждый провайдер обладает своей собственной реализацией этих классов,
и, поскольку в классах каждого провайдера реализованы одинаковые интерфейсы,
они все обладают одними и теми же методами и свойствами (хотя включение
в класс какого-либо конкретного провайдера дополнительных методов и свойств,
присущих только данному провайдеру, ничему не противоречит). Например, если
требуется установить соединение с базой данных SQL Server, то для этих целей
используется объект sqiconnection, а при необходимости соединения с источником
данных ODBC — объект odbcConnection. В обоих объектах реализуется интерфейс
iDbConnection, поэтому они обладают одним и тем же набором методов и свойств.
Объект DataSet
После установления соединения с БД и получения данных из нее предоставля-
ется возможность выполнять различные манипуляции над данными с помощью
объекта DataSet, представляющего собой семейство объектов DataTabie (таблица
данных). Объект DataTabie позволяет хранить данные в табличном виде; т. е.
в виде столбцов и строк. Объект DataSet не является составной частью провайде-
ра данных (существует только один тип объекта DataSet независимо от того, по-
ступили данные из источника данных SQL Server или OLE DB), следовательно,
объект DataSet не отвечает за установление соединения с источником. Это означа-
ет, что когда мы выполняем какие-либо манипуляции надданными, находящимися
в DataSet, то мы на самом деле работаем всего лишь с копией этих данных, распо-
ложенных в памяти локального компьютера. Это позволяет уменьшить нагрузку
на сервер и на сеть, поскольку установление соединения с источником данных про-
исходит только в момент первоначального обращения к данным и тогда, когда мы
завершаем их редактирование и необходимо внести сделанные изменения в саму
базу данных. Наряду с преимуществами, такая архитектура работы без установ-
ленного соединения приводит к возникновению определенных проблем. В среде
с полностью разорванным соединением пользователь не может быть уведомлен
об изменениях, которые были внесены в данные другими пользователями. Если
для принятия решений используются данные, выведенные на экран, то всегда су-
ществует вероятность того, что эта информация уже устарела, если другие пользо-
ватели в этот момент вносят изменения в эти же самые данные.
Запускайте Visual Studio.NET, создавайте в папке Begcsharp\chapteri8 новое
С# Windows Application, присваивайте ему имя chiSExOi и приступайте к установ-
лению соединения с базой данных!
Доступ к данным пользователя 485
Просмотр данных в YS
Прежде всего нам потребуется собственно база данных, с которой нужно уста-
новить соединение. В данном примере мы соединимся с базой данных SQL Server
Northwind. He беспокойтесь, если у вас нет SQL Server! Microsoft Data Engine
(MSDE — средство для работы с данными компании Microsoft), которое поставля-
ется вместе с Office и Access 2000, представляет собой не что иное, как сокращен-
ную версию SQL Server, и с ним можно работать также, как если бы у вас была
инсталлирована полная версия. MSDE не инсталлируется по умолчанию, и если
MSDE отсутствует в вашей системе, то вы можете воспользоваться пошаговым
руководством по инсталляции MSDE и импортированию базы данных Northwind,
приведенном в приложении В.
Server Explorer
Щ
&]•• i
1-1
й"-'::'".-
|Р \hata Connections!
% Servers
В- Щ! Julians!
в- Цр
Sb Щ
а- с§
Crystal Services
Event Logs
Message Queues
Performance Counters
Services
SQL Servers
Установка соединения с базой данных
После открытия Visual Studio.NET, откройте Server Explorer,
наведя курсор мыши на вкладку, расположенную с правой сто-
роны экрана (по умолчанию вкладка Server Explorer располага-
ется непосредственно над вкладкой Toolbox). В названном окне
(см. рис. слева) выводятся службы, которые имеются на локаль-
ной машине, а также службы, имеющиеся на любых доступных
машинах. В данном случае нас интересует узел самого верхнего
уровня в дереве просмотра Server Explorer — Data Connections,
поскольку именно он позволяет включать в проект соединения
с источниками данных.
Щелкните правой кнопкой мыши на узле Data Connections
и выберите пункт Add Connections.... Откроется диалоговое
окно Data Link Properties (свойства соединений с данными),
представленное на рисунке справа.
По умолчанию провайдер соединения исходит из предпо-
ложения о том, что мы будем осуществлять доступ к базе
данных SQL Server, поэтому все выведенные на экран уста-
новки относятся к провайдеру OLE DB для SQL Server. Для
Ш Date Link Рп-.регЫ
Pievki$
Mfctttttft M 4.0 OLE 0B Amita
МсюпА OLE 08 Provide? k* DTS Packsgss
Microsoft OLE Ш Provide? k* Ыетд Sefvka*
Microsoft OLE DO Piovtetef io* Шя/Ш РиЫгЫщ
Hbosoft OLE 0B ftovkb Ш 0D8C Driver*
МсюиЙ OLE 08 Provider Ш GUM3 Services
Nictosolt 0L£ D8 Provider tot 0?«de
OLE DB Rovider for Mscfoso^ Directoy
SQL Setves DTS Flat Re OLE DS Provider
V$£E УтШщ £n!istme^ Vtowgm Pfo:^ Date Source
OK'
,tr>SQLS«ve*d*i«
нашего примера потребуется образец БД Northwind, поэтому
изменять установки нет необходимости. Однако если возник-
нет необходимость использовать какую-либо другую систему
базы данных, то придется вернуться назад к вкладке Provider
(см. рис. слева) и выбрать провайдер, который подходит для
вашей базы данных.
486 Глава 18
Щелкнув мышью на вкладке Provider, вы получите перечень провайдеров, ин-
сталлированных на системе. Поскольку нам необходим провайдер SQL Server, ис-
пользуемый по умолчанию, то следует просто нажать кнопку Next».
В настоящей главе будет использоваться SQL Server/MSDE н образец БД Northwind.
Если же потребуется использовать какую-либо другую базу данных, то для этого
просто выберите какой-либо подходящий для системы вашей базы данных
провайдер OLE DB (например, для установления соединения с БД Access следует
выбрать провайдер Microsoft Jet). Однако не следует путать эти провайдеры
с провайдерами данных .NET. Data Link не позволяет выбирать провайдеры
данных .NET, поэтому нам придется использовать провайдер данных OLE DB
даже для SQL Server. VS, однако, оказывается в состоянии распознать,
что соединение устанавливается с базой данных SQL Server, и создает
объект sqicoanection самостоятельно.
Щелкнув мышью на кнопке Next», мы вернемся обратно к вкладке Connection.
Здесь потребуется задать всю информацию, необходимую VS для установления со-
единения с БД. Во-первых, необходимо либо ввести имя сервера, на котором ин-
сталлирован SQL Server или MSDE, либо выбрать его из раскрывающегося списка.
Далее необходимо указать учетную запись пользователя, которую вы хотите ис-
пользовать для установления соединения с базой данных. Если вы воспользуетесь
пунктом Use Windows NT Integrated Security (использование объединенной системы
безопасности Windows NT), то VS попытается установить соединение с БД с той
же самой учетной записью, которую вы использовали для регистрации в Windows.
Если для установления соединения с вашим SQL Server вы
хотите воспользоваться другим именем пользователя и па-
ролем, то необходимо выбрать следующую возможность —
Use a specific username and password (использование за-
данного имени пользователя и пароля) и ввести необходи-
мую информацию в соответствующие окна. По умолчанию
при использовании как MSDE, так и SQL Server инстал-
лируется пользователь с именем sa и пустым паролем.
Наконец, выберите БД Northwind из раскрывающегося
списка Select the database on the server (выбор БД на сер-
вере). Если вы используете MSDE, a Northwind в списке
отсутствует, то следует обратиться к приложению В за по-
дробным описанием импорта требуемой базы данных.
После ввода всей необходимой информации, щелкните
мышью на кнопке Test Connection (проверочное соедине-
ние). Если будет выведено диалоговое окно с сообщением:
"Тестовое соединение установлено." (см. рис. справа), то
соединение установлено.
Provider СоплесЬоп j AcVa'wed j Ali j
Spec<fy the foiioivlog lo ео-ялес* ?o SOL Sewer da?,
1. Sekct с* &Ш <s «sv« rwrrw:
SI '
2 Ert.: . 03 or to the ;er»'ef
<" Use Window; MI trtegiated security
':,
Server Explorer
% m
j
Data Connections
ЁЬ «lAWSLMorthwind.dbo Database Diagrams
Tables
Щ-
Eh Sfe
f±b f|p Stored Procedures
k Servers
Примите наши поздравления — вы успешно установили свое
первое соединение ADO.NET с базой данных! Теперь его можно
увидеть — оно расположено непосредственно под Data Connections
в Server Explorer (см. рис. слева).
Мы-получили доступ к базе данных и ко всем хранящимся в ней
данным даже не выходя из VS! Теперь стоит ознакомиться с их
структурой. Это пригодится при написании кода, осуществляющего
доступ к данным, чем мы будем заниматься в следующей главе.
Доступ к данным пользователя 487
Таблицы и 0ТИ01Ш ., ы щ ных
Войдите в Server Explorer и откройте узел Tables (таблицы), который
находится под только что добавленным соединением. Теперь можно уви-
деть список таблиц, имеющихся в базе данных (см. рис. справа).
Реляционные базы данных, к которым относятся SQL Server и Oracle,
хранят данные в виде последовательности связанных между собой таб-
лиц. Эти таблицы состоят из строк и столбцов;, каждая строка представ-
ляет собой запись, хранящуюся в базе данных, а каждый столбец
представляют собой отдельные поля каждой записи. Для того чтобы по-
лучить наглядное представление об этой структуре, щелкните правой
кнопкой мыши на узле Customers (потребители) в Server Explorer и вы-
берите пункт Retrieve Data from Table (извлечение данных из таблицы).
•: Q
-f П
л О
•: D
'• U
"•"• О
л; D
^ D
•. С
"<• П
С и ••£ огк-е rCus t о merOerao
Customer -OemugrapHc*
Гщ)1и.1в1
Er^ptoyeeTe; Tories
Of cfer Details
Order*
Products
Ш К 1
Stfcpcrs
а
LLL
1
z
<i
ЖШ
AMATR
ANTON
AROUT
BERGS
BUU5
6C-LID
E.ONAP
6CTT!*:
SSBEV
CACTU
СЕЛГГС
CHOPS
CCMf-'U
CCNSH
DRACD
Alfred-; Futterkisfce
Ana lu i ! i pa • !<>,'.•" . ч '•
AfKon •: M J • :•- •. T ->queria
Around the Horn
Bergkr.cis ^^S* zp
Don app'
Bottom 'У/-У, Markets
Cf. Beverages
Ccc^,? CDrnidas ээга iev^r
СсЫго cofftercia! Moctezuma
Chop-susy Ch:'n«ss
Comerdo Wneiro
: Consolidated Holdings
Otus-ht. iblui Dcukatessen
M ^ ki Anders
АГЙ TrujiliO
Antonio Moreno
"hc-nvj? Hardy
Cbistins Eergfund
Hanrvj Moos
Martih Sornmer
Lauience Lebihan
. Elizabeth Lincoln
1 Victoria Asbwofth
Petrki-o Simpson
Francisco Chang
Vat.g Wdng
Pedro Afonso
Elaabeth Brown
Svers Ottlieb
Owner
'; Owner
S^les Repre$sntaUve
Orcf«:: Ad" rastretor
Sales Rupr-;5eot-,t-ve
: Ower
: Owner
Accounting Мзпедвг
5.^'e> Represent:ativt
:: Sales Agent"
i Martet«i9 Manager
; Owner
Soies Associate
Х-У5 Rep e^entetjve
Order Administrator
*-!
Avdo. deia СоГ
Mot3d«r05 231 .
120 Hanover S(
Foisterstr. 57
' * > Л s^< j i ^ * i ; - i - ' E i r - ^ r ' •"•••
•- J f e t r • .
С/ Агас,Ы, 6?
12, rue de у few
23 T<;owos5en 1
f:.J vui-^rOy CirC :
Cerrito 333
HauptsL''. 29 1
Av, cio§ Lusi'a^ i
Berkeley Garde j
W^serwegZl >]
I D
к Servers
Это приведет к тому, что VS
загрузит и выведет на экран
данные, хранящиеся в таблице
Customers нашей базы данных
Northwind (см. рис. слева).
Использующаяся в качестве
образца база данных Northwind
содержит данные о вымыш-
ленном торговце продуктами
питания, снабжающем различ-
ные рестораны и продовольственные магазины. В таблице customers хранится
подробное описание каждого такого потребителя. Каждая строка этой таблицы
соответствует отдельной компании, которую снабжает продуктами Northwind,
а каждый столбец содержит конкретную информацию об этой компании: название
компании, ее адрес, а также имя и должность лица, через которого осуществляет-
ся контакт с данной компанией.
Каждая строка таблицы определяется уникальным пятисимвольным идентифи-
кационным кодом, который хранится в поле Customers ID. ЭТОТ код известен под
названием основного ключа и является жизненно важным с точки зрения установ-
ления отношений между таблицей customers и другими таблицами в базе данных.
Для того чтобы увидеть, как это работает, щелкните правой кнопкой мыши на узле
Orders (заказы), и снова выберите пункт Retrieve Data from Table, на экран будет
выведена необходимая нам
таблица (см. рис. справа),
в которой представлены за-
казы, полученные компа-
нией Northwind. Каждая
строка соответствует одному
заказу. Заметьте, что в таб-
лице также присутствует
поле customeriD, содержа-
щее те же пятисимвольные
идентификационные коды,
ЧТО И В таблице Customers.
OrderiO
•таи 10331
Ш332
10333
10534
1.0335
10336
10337
1033S
10339
10340
10341
10342
10343
1034*
10345
Ш346
. . . . .
Т.Си
IILA5
BONAP
MERE?
WARTH
У 1С ТЕ
HUNGO
ршЙ1
FRANK
OLDWO
fMEREP
BCNAP
SIMOB
FRANK
5LEHMS
WHITC
: QUICK
" jRATTC
;3
з "1Л"л"**'^1а
;5
fi
_ s ' •••••••••••••
иЙ fi
if
1У'
':4
4
.12
•Г j-c
; 16/11/1994
16/11/1994
17/11/1994
J8/H/J994
2 : / i i / : •;?-}
22/11/1994
23/11/1994
24/11/1994
25/11/1994
23/11/199^
29/11/1994
29/11Л 59-.
30/15/1994
i 01/12/1994
02/1Z/1994
05/12/19^
06/12/1994
JRequiredDaie
H/12/1994
23/12/1994
29/12/1994
16/12/1994
19/12/1994
120/12/1994
21/12/1994
22/12/1994
гз.аг/1994
26/12/1994
27/12/199^
27/12/1994
:14/12/1994
29/12/1994
30/12/1994
;Q2/01/1995
•17/01/1995
• ^ J D 5 ^ Ж 1
28/11/1994
;21/11/1994 |
;21/П/1994 j
25/П/1994 : j
[28/11/1994
: 24/11/1994 ,.:
25/11/1994 :
! 29/11/1994 ;
29/n/1994 \
05/12/1994 j
09/12/1S94 j
06/12/1994
' i 05/12/1994 j
07/12/1994 j
06/12/1994
12/12/1994 . j
09/12/1994 Yj
, : ..•:'.... •'..'.....^Jl:.'iJ
488
Глава 18
Orders
Products
Region
Shippers
Add dose Help
Выберите все представленные в списке
таблицы и щелкните мышью на кнопке Add.
Затем щелкните мышью на кнопке Close
и закройте диалог Add Table (добавление
таблицы).
После этого VS создаст диаграмму, в ко-
торой будут изображены все заданные табли-
цы и отношения между ними (см. рис. справа).
Если вы используете MSDE
U импортируете БД Northwind
с использованием мастера Import
and Export Data (импорт и экспорт
данных), то на диаграмме не будут
отражены отношения между
таблицами, поскольку мастер
не импортирует информацию
об основных и внешних ключах.
Для того чтобы получить на экране изоб-
ражение всей диаграммы целиком, щелкните
правой кнопкой мыши на каком-либо неза-
нятом участке диаграммы и выберите пункт
Zoom | То Fit из открывшегося меню. Хотя
в этом случае, возможно, вы не сможете
Значения, находящиеся в этом столбце, используются
в качестве указателя на соответствующую строку в таб-
лице Customers, в которой может быть найдена дополни-
тельная информация о конкретном заказчике. Такой
столбец известен под названием внешнего ключа.
В VS предусмотрен инструмент, позволяющий пред-
ставлять эти взаимоотношения в рамках базы данных
между основными и внешними ключами в виде диаграм-
мы. Для того чтобы вывести диаграмму на экран, щелк-
ните правой кнопкой мыши на узле Database Diagrams
(диаграммы базы данных) соединения Northwind в Server
Explorer и выберите пункт New Diagram (новая диаграм-
ма). После, этого VS выведет окно (см. рис. слева) —
запрос относительно того, какие таблицы мы желаем
включить в диаграмму.
*
1
1
: . . . . . . . ••
1
а. ,:..
прочесть все названия столбцов! Отношения представлены в виде линий, соединя-
ющих таблицы, причем на обоих концах линий имеются символы. Изображение
ключа, расположенное рядом с таблицей, свидетельствует о том, что основной
ключ данной таблицы относится к внешнему ключу таблицы, находящейся на дру-
гом конце линии. Значок бесконечности обозначает внешний ключ, который соот-
ветствует основному ключу соответствующей таблицы.
Вы, однако, покупали VS не для того, чтобы использовать ее в качестве клиент-
ской части своей базы данных, поэтому познакомимся с тем, каким .образом можно
использовать установленное соединение из программ, написанных на С#!
Доступ к данным пользователя 489
Осуществление доступа к базе данных
из приложения
Вернитесь назад к окну разработки формы
в проекте chi8Ex0i, добавьте в него текстовое
окно и надпись и измените свойства этих объектов
в соответствии с таблицей справа.
Управляющий Свойство
элемент
Значение
Cusfcomei ID
Form
Textbox
Label
Name
Text
Name
Text
Name
Text
frmMain
Data_Examplel
txtCustID
(пусто)
lblCustID
Customer ID
Окончательный результат должен выглядеть
приблизительно так, как показано на рисунке
слева.
Теперь добавим в проект соединение с базой данных. Откройте окно
Toolbox (см. рис. справа) и выберите раздел Data. В этом меню выводятся
все доступные управляющие элементы, позволяющие работать с данными.
Существуют отдельные Объекты DataAdapter, Connection И Command ДЛЯ
провайдеров SQL Server и OLE DB. Для объектов SQL Server использует-
ся префикс sqi, а объекты OLE DB начинаются с oieDb. В данном случае,
так как мы осуществляем доступ к БД SQL Server, будет использоваться
провайдер SQL Server. Щелкните мышью два раза на sqiDataAdapter —
откроется диалоговое окно мастера настройки конфигурации адаптера
данных.
;
Choose Your Date* Connection
ГЬ$ &ia 4d**« N I ж Site queries using this eonntcSar» to bud
onti update date.
Chooje ban ihe ! :t of da\» cwncciion* o > : ^% h Suvcs bffote* o; add а r«w СОГЛФСЙСЛ
Which dala connection should the <I«*U» «xiotw
Toolbox
Data
I 1^ Pointer
^ OleDbDataAdopier
l.^. O'eDbConr-ectior.
^•5 OteObCommand •
Щ SqiDataAdapter
-: j|' SqlCcnnection
^ SqJCommand
Clipboard Ring_
General
Мастер настройки
конфигурации
адаптера данных
Появившись на экране, мастер настройки
конфигурации адаптера данных задаст во-
прос: какое из соединений с базами данных
вы хотите использовать (см. рис. слева).
490
Глава 18
C h o o s e tt Q u e r y T y p e
Th Ш Ы$ uses SQL H*tm*vtt
How <h*ad rhe do;o adorer ac«*»s «he database?
^ UseSQLtMomenU .
ЦЛттМ
end Dt •
b f ^ V ): due
f Usee; • j,^
SQL-операторов). Эта опция делает
возможным применение команд, напи-
санных на Structured Query Language
(SQL — структурированный язык за-
просов (не путать с SQL Server!)), для
определения данных, которые требует-
ся извлечь. SQL — это специальный
язык, используемый для работы с ре-
ляционными базами данных.
Нажмите кнопку Next>, чтобы пе-
рейти к диалоговому окну для ввода
SQL-оператора, с помощью которого
будут извлечены необходимые данные
(см. рис. справа). Однако совершенно
не обязательно вводить SQL-оператор
самостоятельно — это можно пору-
чить VS.
I - ' ' f ; | V*t4 ,•; j РиГ)СЬ0Г»5 j
Categories
CustomerCus tome r D emo
EmployeeTerritories
Order Datais
Orders
dippers
uppiiers
yscoiumns
:-. f
Есть единственное настроенное соедине-
ние с базой данных (настроенное ранее для
доступа к базе данных Northwind), поэтому
только оно и оказывается доступным в списке
соединений. Если до настоящего момента ни
одного соединения не установлено, т. е. воз-
можность выбрать New Connection... (новое
соединение) и создать его прямо, здесь.
В следующем окне (см. рис. слева) мастер
запрашивает, как мы будем определять дан-
ные, которые требуется извлечь:
Выберите для нашего примера в диалого-
вом окне, представленном на рисунке слева,
опцию Use SQL Statements (использование
i Data Adapter СопПошчй
Generate the SQL statements
The Select ttetMnoi* v, | bt used tocre^e the insert Update and
Delete statement*.
p£ in your SQL Seiec! йМЩЩШ Щ ЩЩ ЩШШ д
/h^t data should the data adaplei lond in to. (
.:
Для того чтобы построить SQL-оператор
с помощью VS, в том же диалоговом окне,
в котором можно ввести оператр вручную,
щелкните мышью на кнопке Query Builder...
(построение запросов), расположенной в пра-
вом нижнем углу окна. Откроется диалоговое
окно Add Table (см. рис. слева), с которым мы
уже знакомы.
Доступ к данным пользователя 491
Теперь нам представлен список
таблиц, хранящихся в базе данных
Northwind. Выберите из него таб-
лицу Customers. Щелкните мышью
на кнопке Add. На экране появит-
ся диалоговое окно Query Buiider,
представленное на рисунке слева.
Добавьте нашу таблицу customers
в Query Builder, а затем щелкните
мышью на кнопке Close. Теперь
у нас появилась возможность вы-
бирать отдельные столбцы в таб-
лице Customers.
Структурированный язык запросов
На данном этапе необходимо сделать несколько пояснений, касающихся SQL.
Как мы уже отмечали ранее, SQL (допускаются различные варианты произноше-
ния — либо "сиквел", либо "эс-кью-эль" ~ на ваше усмотрение) — это язык, ис-
пользующийся для работы с базами данных, SQL позволяет создавать команды,
с помощью которых можно извлекать данные из баз данных, вставлять, уничто-
жать, а также редактировать данные. Более подробно язык SQL будет рассматри-
ваться в следующей главе, однако в настоящий момент необходимо познакомиться
с командами, которые мы будем использовать для извлечения данных из БД.
Операторы SELECT имеют следующий вид
SELECT столбец!, столбец2, . . . столбецх FROM table (из таблицы),
например:
SELECT CompanyName, ContactName FROM Customers
Эта команда ПОЗВОЛЯет извлечь Значения Столбцов CompanyName И ContactName
ДЛЯ Всех СТрОК таблицы Customers.
Существует также возможность ограничить число извлекаемых строк, добавив
в оператор SELECT посылку WHERE. Предложение WHERE позволяет задавать значе-
ние конкретного столбца; в этом случае из базы данных будут извлекаться только
те строки, у которых в соответствующем столбце имеется данное значение. На-
пример,
SELECT CompanyName FROM Customers WHERE Region = 'WA'
Приведенный выше запрос позволяет извлечь названия компаний, расположен-
ных вблизи Вашингтона.
Вместо указания имен столбцов можно использовать символ звездочки. Это по-
зволит получить все столбцы, имеющиеся в таблице. Например:
SELECT * FROM Customers
Этот оператор извлекает всю таблицу customers целиком.
492 Глава 18
Будьте аккуратны при использовании звездочки. Хотя такая возможность
является доступной и кажется весьма соблазнительной, почти все администраторы
баз данных и программисты, работающие с базами данных, не советуют
ею пользоваться. Использование символа * приводит к тому, что из базы данных
извлекаются все столбцы, имеющиеся в данной таблице на момент выполнения
запроса, а не только те, что были доступны на момент построения проекта.
И если кто-нибудь добавит какие-либо поля в эту таблицу, то эти поля также
будут извлекаться приложением наряду с полями, извлечение которых
предполагалось изначально. Передача этой дополнительной информации
может оказать существенное влияние на приложение.
Генерирование
SQL-onepamopa
В этом примере потребуются столбцы
CompanyName, ContactName И CustomerlD.
Выберите ЭТИ столбцы В ОКНе Customers
в Query Builder и нажмите ОК. Query Builder
в этом случае создаст SQL-оператор, кото-
рый показан на рисунке справа.
Нажмите кнопку Next>. Адаптер данных
осуществит проверку всех установок и на-
строится на работу с приложением. По
окончании нажмите кнопку Finish. Вы уви-
дите, что в результате к форме были добав-
лены Два НОВЫХ Объекта — SqlDataAdapter
И SqlConnection (см. СЛед. рис.).
i Data Adapter Conflow
Generate the SQL statements
The $«tod dateiww* wl be m$4 Ь eiMtt Ш Ы&К Update.
Delete &ta*e&*ertfs.
Type tn \ -; Q'M
SELECT
FRON
Advanced Option:... j
r! J чВаск | [
ш щ У' \ ' ••••••••• ••: sqID.ataAaapterl sqlConnectionl..-
В адаптере данных содержится основная информа-
ция о данных, которые мы хотим получить из БД. Адап-
тер данных можно представить себе в качестве мостика,
соединяющего объект DataSet с базой данных. Адаптер
данных, являющийся одним из компонентов провайдера
данных .NET, используется ддя наполнения объекта Data-
Set данными, полученными из базы данных, а также для
отсылки всех изменений, сделанных в DataSet, обратно
в базу данных. В объекте SqlConnection содержится вся
информация, необходимая ADO.NET для установления со-
единения с базой данных.
Теперь, когда мы располагаем адаптером и установлен-
ным соединением с базой данных, нам потребуется объект
DataSet, что позволит работать с данными внутри прило-
жения. Щелкните правой кнопкой мыши на только что
созданном объекте sqiDataAdapteri и выберите опцию
Generate Dataset... (создание объекта DataSet). В появив-
шемся в результате этого диалоге (см. рис. справа) предо-
ставлена возможность выбора: можно либо привязать
адаптер данных к уже существующему объекту DataSet,
либо создать новый.
'251
UvR includes tic* i
oc-:..;! .3d.5ta.s-2t:
QjpG Q 5 v vs t < x? Q-s^
', , . . л ; ^ <
th» dv.a..-et to У
Доступ к данным пользователя 493
Solution ШЗЕхОГ (1 project)
f p ChlBEnOl
ЦЦ References
fi| AssemblyInfccs
Щ dsCustomers«xsd
EH FormLcs
В нашем примере мы создадим новый объект DataSet. Посколь-
ку у нашего проекта не имеется ни одного объекта DataSet, опция
New (новый) будет выбрана по умолчанию. Измените имя создавае-
мого объекта DataSet на dsCustomers И нажмите ОК.
Теперь появляется новый объект — DataSet — вслед за соеди-
нением и адаптером данных. Вы могли не заметить изменения
в Server Explorer. Посмотрите внимательнее, в проекте добавлен
новый файл с именем dsCustomers.xsd (см. рис. слева).
Названный файл представляет собой схему объекта DataSet. XSD-схема (XML
Schema Definition — определение схемы XML) представляет собой документ,
с помощью которого можно проверить правильность структуры XML-документа.
XML — это текстовый формат, использующийся для представления данных, важ-
ность которого существенно возросла, в частности, в связи с распространением
Интернета. XML и XSD-схемы будут рассматриваться в последнем разделе этой
главы. Схема представляет весьма важный инструмент, использующийся ADO.NET,
поскольку, организация и структурирование данных, выполняемые DataSet за ку-
лисами, предполагают использование XML. Этот файл генерируется Visual Studio
автоматически; в нем задается структура набора данных, все таблицы и все отно-
шения между таблицами.
Поскольку объект DataSet уже создан, то мы получаем возможность привязать
текстовое окно формы к данным, извлеченным из базы данных. Щелкните мышью
на текстовом окне txtcustiD, а затем прокрутите свойства этого окна до подразде-
ла DataBindings. ЕСЛИ Щелкнуть МЫШЬЮ на сеКЦИИ Text внутри DataBindings, TO
можно увидеть комбинированное окно, в котором находится dsCustomersi и все
столбцы, имеющиеся в таблице. Выбрав в этом окне произвольный столбец, можно
привязать соответствующее поле к этому текстовому окну. Это всего лишь означа-
ет, что по мере прокрутки набора данных значения, находящиеся в этом столбце,
выводятся в этом окне. Все изменения, которые пользователь вносит в текстовое
окно, отображаются также и в объекте DataSet. Объект DataSet не поддерживает
постоянного соединения с источником данных; отсюда следует, что сам по себе
этот источник не будет обновляться — до тех пор, пока мы не направим с этой
целью соответствующий запрос.
В данном примере мы хотим привязать тек-
стовое ОКНО К СТОЛбцу CustomerlD; ДЛЯ ЭТОГО
следует выбрать CustomerlD в комбинирован-
ном окне (см. рис. справа).
Если теперь вы сохраните и запустите свой
проект, то увидите пустое текстовое окно. По-
чему это так? Разве те данные, с которыми мы
работали на протяжении нескольких предшест-
вующих страниц не должны оказаться в нашем распоряжении? Если отвечать на
этот вопрос коротко, то нет, не должны. Не следует забывать, что до настоящего
момента мы занимались лишь описанием той структуры, которую, как мы предпо-
лагаем, будут иметь данные, извлекаемые из таблицы. Мы пока ни разу не попы-
тались описать реальные данные, кроме того, мы пока не давали команды
приложению считывать какие-либо данные. Для этого потребуется включить
в пример определенный код (на самом деле, это лишь малая часть из тех строк
кода, который будет использоваться в данной главе).
Нам необходимо приказать адаптеру данных наполнить объект DataSet. Щелк-
ните мышью дважды на пустом месте формы. После этого вы окажетесь в диалоге
dsCustomersi
Й"'Ор Customers
1 [ f j CompanyName
М П ContactName
X None zl
494 Глава 18
редактирования кода, а курсор будет находится внутри обработчика события "за-
грузка формы". Введите в этот обработчик событий следующий код:
private void frraMain_Load(object sender, System.EventArgs e)
// Наполнение набора даннь!хданнь1ми/: х
//в базе данных Northwind в таблице "Customers"
this vsqlDbDat a Adapter! .Fill (this .dsCustomersl, 1, 0 , "Customers"} ;
Customer ID
В этих строках происходит обращение к методу Fill о адаптера данных. Этот
метод осуществляет наполнение объекта DataTabie, находящегося внутри DataSet,
данными, полученными от источника данных. Этому методу передаются четыре
параметра. Первый параметр — это объект DataSet, который мы собираемся на-
полнять, в данном примере — это набор данных dsCustomeri. Во-вт
Категория: информатика | Просмотров: 883 | Добавил: basic | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Календарь
«  Февраль 2010  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

krutoto.ucoz.ru
Бесплатный конструктор сайтов - uCoz