Программирование >>  Программирование с использованием ajax 

1 ... 291 292 293 [ 294 ] 295 296 297 ... 396


Ту же программу можно переписать с несколькими небольшими изменениями, чтобы использовать версию этой же базы данных для Microsoft Access (nwind.mdb). Вы найдете ее в каталоге С:\Рг од г am Files\Microsof t Of f iceXOf f iceXX\Samples (если инсталляция Microsoft Office включает Microsoft Access).

Фрагмент XX в OfficeXX- это заполнитель для номера, такого как Office 11 для Office 2003 или 0fficel2 для Office 2007.

Сделайте копию файла (во временном каталоге, например. С: \Northwind\nwind.mdb), чтобы всегда можно было вернуться к оригиналу.

Если у вас еще нет Office, загрузите Nwind.exe из следующего источника:

http: microsoft.com/downloads/details.aspx?familyid=c6661372-8dbe-422b-8676-c632d66c529c & displaylang=en

Запустите Nwind.exe для инсталляции базы данных примеров; эта программа запросит каталог, так что можно будет поместить базу туда, куда необходимо, например, в с: \Northwind. За исключением деталей строки соединения, внесенные изменения в следующем практическом занятии, будут работать с любым источником данных OLE DB.

Р *®* занятие Чтение данных из базы Access

L Создайте новое консольное приложение по имени ReadingAccessData в каталоге С: \BegVCSharp\Chapter28.

2. Начните с добавления директив using для классов поставщика OLE DB, которые будут использоваться:

#region Using Directives using System;

using System.Data; Использовать пространство имен ADO.NET

using System.Data.OleDb; Использовать пространство имен для

поставщика OLE DB .NET

using System.Collections.Generic;

using System.Text;

#endregion

3. Добавьте следующий код в метод Main ():

static void Main(string[] args) {

Создать объект соединения для поставщика Microsoft Access OLE DB; обратите внимание на символ 0, предшествующий строковому литералу, чтобы правильно воспринимались обратные слэши в пути файла. OleDbConnection thisConnection = new OleDbConnection ( @ Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Northwind\nwind.mdb );

Открыть объект соединения thisConnection.Open ();

Создать объект команды SQL на этом соединении OleDbCommand thisCommand = thisConnection.CreateCommand ();

Инициализировать команду SQL SELECT для извлечения нужных данных thisCommand.CommandText =

SELECT CustomerlD, CompanyName FROM Customers ;

Создать объект DataReader на основе ранее определенного объекта команды OleDbDataReader thisReader = thisCommand.ExecuteReader();



while (thisReader.ReadO)

Console.WriteLine( \t{0}\t{l} ,

thisReader[ CustomerlD ], thisReader[ CompanyName ]);

thisReader.Close 0; thisConnection.Close ();

Console.Write( Программа завершена, нажмите Enter для продолжения: ); Console.ReadLine ();

Описание полученных результатов

Вместо объектов SqlConnection, SqlCommand и SqlDataReader вы создаете объекты OleDbConnection, OleDbCommand и OleDbDataReader. Эти объекты работают по существу таким же образом, как их аналоги из SQL Server.

Соответственно вы изменяете директиву using, специфицирующую поставщика данных с

using System.Data.SqlClient;

using System.Data.OleDb;

Единственное другое отличие - строка соединения, которую вы должны изменить полностью. Первая часть строки соединения OLE DB - конструкция Provider - специфицирует имя поставщика OLE DB для базы данных этого типа. Для открытия баз Microsoft Access (файл . mdb) необходимо сделать так:

Data Source=C:\Northwind\nwind.mdb

Опять-таки, символ @, предшествующий строке соединения, специфицирует строковый литерал, чтобы правильно работали обратные слэши в путевом имени; в противном случае понадобились бы двойные слэши для правильного восприятия полного имени файла в С#.

Чтение данных с помощью DataSet

Вы только что узнали, как читаются данные посредством DataReader, а теперь посмотрим, как достичь тех же целей с помощью DataSet. Для начала подробно рассмотрим его структуру. DataSet - центральный объект ADO.NET; все операции любой сложности используют его. DataSet содержит набор объектов DataTable, представляющих таблицы базы данных, с которыми вы работаете.

Объект Da ta Table может быть всего один.

Каждый объект DataTable имеет дочерние объекты DataRow и DataColumn, представляющие строки и столбцы таблицы базы данных. Вы можете получить все индивидуальные элементы таблиц, строк и столбцов через эти объекты, как будет описано ниже.

Наполнение DataSet данными

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

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



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

Доступ к таблицам, строкам и столбцам в DataSet

Объект DataSet включает в себя свойство по имени Tables, которое является коллекцией всех объектов DataTable внутри DataSet. Свойство Tables имеет тип DataTableCollection и включает в себя перегруженный индексатор, а это означает, что вы можете обращаться к каждому индивидуальному объекту DataTable одним из двух следующих способов.

□ По имени таблицы. thisDataSet. Tables [ Customers ] специфицирует DataTable по имени Customers.

□ По индексу (начинающемуся с нуля). thisDataSet. Tables [ О ] специфицирует первую DataTable в DataSet.

Внутри каждого DataTable есть свойство Rows, представляющее собой коллекцию индивидуальных объектов DataRow. Свойство Rows имеет тип DataRowCollection и представляет собой упорядоченный список, индексированный номерами строк. То есть

myDataSet.Tables[ Customers ].Rows[n]

специфицирует строку номер n - 1 (нумерация начинается с нуля) в объекте DataTable по имени Customers внутри thisDataSet. (Разумеется, для спецификации DataTable также можно использовать альтернативный синтаксис индексов.)

Можно было бы ожидать, что DataRow имеет свойство типа DataColumnCollection, но на самом деле все не так просто, поскольку вы, естественно, хотели бы воспользоваться преимуществами типизации данных индивидуальных столбцов в каждой строке, чтобы столбец, хранящий символьные данные, был представлен строкой, а столбец, содержащий целые числа - целочисленным объектом и т.д.

Объект DataRow сам имеет перегруженное свойство indexer, позволяющее обращаться к индивидуальным столбцам по имени и по номеру. Таким образом,

thisDataSet.Tables[ Customers ].Rows[n][ CompanyName ]

специфицирует столбец ColumnName строки номер n - 1 в DataTable по имени Customers объекта tliisDataSet.

Объект DataRow здесь представлен как thisDataSet .Tables [ Customers ] .Rows [n].

Следующее практическое занятие демонстрирует все описанные приемы на примере программы, использующей DataSet и его дочерние классы. Начнем с программы, которая просто читает данные. Ее функциональность подобна программе-примеру DataReader, но выполняет свою задачу посредством DataSet.

J[lE5S[!*l!i Чтение данных с помощью DataSet

Для создания примера выполните следующие шаги в Visual С# 2008.

L Создайте новое консольное приложение по имени DataSetRead в каталоге С: \

BegVCSharp\Chapter28.

2. Добавьте директивы using для необходимых классов ADO.NET:

#region Using Directives using System;

using System.Data; Использовать пространство имен ADO.NET

using System.Data.SqlClient; Использовать пространство имен

поставщика данных SQL Server



1 ... 291 292 293 [ 294 ] 295 296 297 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика