-
Классы каркаса, предназначенного для работы с базами данных, собраны в ADO.NET. Класс DataSet (Набор данных) позволяет работать с реляционными данными реляционным же способом, независимо от того, есть ли в текущий момент соединение с источником данных.
-
Префикс имен классов и методов указывает на источник данных. Например, префикс OleDb (OLE для баз данных) указывает на использование источника данных OleDb (OLE для баз данных). Префикс Sql указывает на использование источника данных SqlServer.
-
Проводник Visual Studio .NET по серверу, Server Explorer – полезная утилита при работе с базами данных. Хотя и не такая мощная, как SQL Server Enterprise Manager, она обеспечивает базовые возможности, необходимые при создании и отладке приложений, работающих с базами данных.
-
Следующим примером станет использование классов ADO.NET для получения доступа к данным, хранящимся в базе данных. Соответствующие файлы находятся в подпапке Connected. | Нам необходимы объекты для соединения, хранения команд, передаваемых базе данных, и хранения самих данных, поэтому мы определяем три указателя на объекты классов SqlConnection, SqlCommand и SqlDataReader: | SqlConnectlon *conn = 0;
-
Использовавшийся в предыдущем примере режим называют соединенным. Программа соединяется с базой данных, выполняет все необходимые действия, а затем отсоединяется. При этом перемещаться по данным базы можно только в одном направлении.
-
Метод ExecuteReader класса SqlCommand возвращает экземпляр класса DataReader. Данные возвращаются, если в качестве команды задан запрос на выборку. Этот же метод можно использовать для обновления, вставки или удаления данных.
-
При его создании SqlDataReader не указывает ни на какую запись возвращенного набора данных. Поэтому для получения доступа к данным следует вызвать метод Read (Читать). Как показано в примере Connected, для получения доступа к отдельным полям или столбцам текущей строки можно использовать свойство Item (Элемент). Получить все поля строки можно также с помощью метода GetValues.
-
Иногда необходимо параметризировать SQL-запрос. Кроме того, бывает желательно связать входные и выходные аргументы хранимой процедуры с переменными программы. | Для того чтобы сделать это, следует определить свойство Parameters (Параметры) класса SqlCommand, которое является коллекцией экземпляров класса SqlParameter.
-
Класс DataSet (Набор данных) представляет собой резидентную упрощенную реляционную базу данных, не соединенную прямо ни с какой другой базой данных. Некоторые из его свойств описывают таблицы (Tables) и отношения (Relations) между ними в наборе данных.
-
При помещении данных в объект DataSet (Набор данных) считываются также и связанные с этими данными таблицы и столбцы. Каждый набор данных имеет коллекции, представляющие все таблицы, столбцы и строки, связанные с данными, содержащимися в этом наборе.
-
Можно также выбрать подмножество данных из объекта DataSet (Набор данных). Метод Select (Выбрать) класса DataTable (Таблица данных) имеет синтаксис, совпадающий с синтаксисом фразы "where" в SQL-запросах.
-
Каким образом метод SqlDataAdapter::Update (Обновить) передает источнику данных информацию о произведенных изменениях? Изменения, внесенные в объект DataSet (Набор данных), передаются базе данных с помощью свойств InsertCommand, UpdateCommand (Команда обновления) и DeleteCommand класса SqlDataAdapter.
-
Для определения свойств InsertCommand, UpdateCommand (Команда обновления) и DeleteCommand можно использовать класс SqlCommandBuilder. Но из-за того, что для динамического определения этих свойств класс SqlCommandBuilder должен получить нужную информацию, его использование повлечет за собой необходимость произвести несколько дополнительных обращений к базе данных и уменьшение производительности.
-
Когда преобразователь данных обновляет содержимое базы данных, это не делается одной транзакцией. Если необходимо, чтобы несколько операций выполнялись за одну транзакцию, в программе следует предусмотреть управление транзакциями.
-
Транзакции только помогают сохранить непротиворечивость базы данных. Если вы переводите деньги со сберегательного счета на текущий для оплаты счета за телефон, транзакции помогут гарантировать, что деньги будут сняты с одного счета и появятся на другом (или же не произойдет ни того, ни другого).
-
На рис. 9.5 представлена иерархия объектов, содержащихся в DataSet (Набор данных). Прежде, чем приступить к материалу, излагаемому ниже, полезно ознакомиться с этой диаграммой. | Рис. 9.5. Иерархия класса DataSet (Набор данных) | Множественные таблицы в объекте DataSet (Набор данных) | Каждый объект DataSet (Набор данных) содержит коллекцию из одного или более объектов, DataTable (Таблица данных).
-
DataSet (Набор данных) можно использовать как резидентную реляционную базу данных, не связанную ни с какой другой базой данных. Теперь на примере программы DataEditing, мы рассмотрим несколько возможностей объекта DataSet (Набор данных), связанных с добавлением данных и отношений непосредственно в набор данных, без обращения к какой бы то ни было внешней базе данных.
-
Каждый объект DataTable (Таблица данных) содержит коллекцию объектов DataRow. Каждый такой объект представляет строку таблицы. Добавление нового объекта DataRow влияет на ограничения объекта DataColumn (мы предполагаем, что свойство EnforceConstraints объекта DataSet (Набор данных) имеет значение true (истина)). | Первичные ключи | Существует несколько типов ограничений.
-
Рассмотрим, как можно получить информацию об объекте DataTabie (Таблица данных), точнее, об ограничениях и ключах этого объекта. В предыдущем примере уже было показано, как получить доступ к объектам Data-Column объекта DataTabie (Таблица данных).
-
При необходимости внести значительные изменения в объект DataSet (Набор данных) и отложить при этом проверку ограничений и событий, можно использовать режим редактирования набора данных. | BeginEdit. | EndEdit, | CancelEdit | Переход в режим редактирования осуществляется вызовом метода BeginEdit объекта строки, которую необходимо изменить.
-
К этому моменту мы изложили более чем достаточно материала, необходимого для понимания классов Customer (Клиент) и HotelBroker (Посредник, бронирующий места в гостинице) из версии приложения Acme Travel Agency (Туристическое агентство Acme), ориентированной на работу с базами данных.
-
Документы могут содержать в себе результат вычислений, полученный от базы данных. Например, отчет о продажах содержит, кроме данных о продажах, полученных от источника данных, и некоторые пояснения. Для представления данных в виде документа ХМL используется класс XmlDataDocument.
-
Для иллюстрации связи между реляционной моделью объекта DataSet (Набор данных) и моделью ХМ L прежде всего извлечем некоторую информацию из базы данных. В примере DataSetXml для этого используются те же команды и способы, что и ранее в этой главе.
-
Используя объект DataSet (Набор данных) можно создать новый документ XML. Используя запрос XPath, можно перейти в начало документа, а затем, с помощью объекта XmlNodeReader прочитать весь документ. Мы выведем содержимое документа на экран. Класс XmlNodeReader обеспечивает перемещение по документу.