Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1432

.pdf
Скачиваний:
1
Добавлен:
07.01.2021
Размер:
1.15 Mб
Скачать

8.5.Обработка массива записей

Спомощью q-операторов можно обрабатывать сложные структуры. Например, пусть имеется массив A типа stud.

structure stud public string Name public int Grp public double Res end structure

Запрос From – In - Order By - Descending позволяет сортировать записи по одному из полей Res в порядке убывания.

Dim b = From x In A Order By x.Res Descending

Пример программы

В примере создается массив типа «Структура». Массив заполняется данными, а затем выполняется запрос – сортировка по возрастанию. Исходные данные и результат выводятся на экран.

Пример 8.3

Module Module1

объявление структуры

Structure stud

Public Name As String

Public Grp As Integer

Public Res As Double

End Structure

Sub Main()

объявление массива типа структура

Dim A(5) As stud

заполнение массива данными

For I As Integer = 0 To 5

A(I).Name = Str(I) + " студент"

A(I).Grp = 342

A(I).Res = Int(90 * Rnd() + 10)

99

Console.WriteLine(A(I).Name+Str(A(I).Grp)+Str(A(I).Res))

Next

Console.WriteLine()

‘ выполнение запроса и вывод результатов на экран

Dim b = From x In A Order By x.Res Ascending For Each c In b

Console.WriteLine(c.Name + Str(c.Grp) + Str(c.Res)) Next

Console.ReadLine()

End Sub

End Module

8.6. Задания на тему «Обработка массива записей»

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

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

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

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

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

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

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

100

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

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

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

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

Порядок выполнения лабораторной работы

Создать папку с набором тестовых данных.

Создать новый проект – приложение Windows Forms.

Вынести на форму необходимые визуальные компоненты.

Добавить программный код обработки событий.

Компилировать программу.

Тестировать программу.

Создать документ с описанием работы программы.

101

9. РАБОТА С БАЗОЙ ДАННЫХ

Задачи обработки данных делятся на несколько процессов. Вопервых, необходимо подключиться к источнику данных, а затем выбрать данные, которые требуется отобразить. После импорта данных в приложение требуется организовать их временное хранение, например в объекте DataSet. На рис. 9.1 изображены основные процессы обработки данных.

Рис. 9.1. Цикл обработки данных

9.1. Чтение информации из базы данных

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

OleDbConnection; для построения запроса – класс OleDbCommand;

для чтения данных – класс OleDbDataReader; для обработки исключительных ситуаций – класс OleDbException.

Управляемый провайдер OLE DB

Вместе с ADO.NET поставляются два управляемых провайдера. Управляемый провайдер OLE DB можно использовать для доступа к

MS Access, Oracle, MS SQL Server 7.0. Управляемый провайдер SQL

может обращаться к данным только MS SQL Server 7.0 и последующих версий. Если для доступа к данным используется OLE DB, то необходимо указать соответствующее пространство имен: using System.Data.OleDb

102

В табл. 9.1 представлены важнейшие типы пространства имен

System.Data.OleDb.

 

Таблица 9.1

Типы пространства имен System.Data.OleDb

 

 

Тип

Описание

 

 

OleDbCommand

Представляет запрос SQL к источнику данных

 

 

OleDbConnection

Представляет открытое соединение с источником данных

 

 

 

Представляет соединение с БД и набор команд,

OleDbDataAdapter

используемых для заполнения объекта DataSet, а также

 

обновления исходной БД после внесения изменений в DataSet

 

 

OleDbDataReader

Обеспечивает метод считывания потока данных из источника

 

 

OleDbException

Исключение, возникающее при ошибке

 

 

OleDbPatameter

Используется для передачи параметров процедуре, хранимой

на источнике данных

 

 

Соединение с базой данных

Для установления соединения с базой данных необходимо создать строку соединения (connection string). С ее помощью можно задать имя компьютера, параметры безопасности, имя базы данных, имя провайдера. В табл. 9.2 представлены некоторые провайдеры

OLE DB.

 

Таблица 9.2

Наиболее часто используемые провайдеры OLE DB

 

 

Значение

Описание

 

 

Microsoft.Jet.OLEDB.4.0

Используется для подключения к Access

 

 

MSDAORA

Для подключения к базам данных Oracle

 

 

SQLOLEDB

Для подключения к базам данных MS SQL Server

 

 

Объект OleDbConnection представляет уникальное подключение к источнику данных. В случае с системой базы данных типа «Клиентсервер» это эквивалентно сетевому подключению к серверу. Класс OleDbConnection содержит члены (табл. 9.3), позволяющие настраивать различные параметры подключения.

103

 

 

Таблица 9.3

 

Члены класса OleDbConnection

 

 

 

 

Член класса

 

Описание

BeginTransaction

 

 

 

CommitTransaction

 

Начать транзакцию, завершить ее или отменить

 

RollbackTransaction

 

 

 

Close()

 

Закрыть соединение

 

ConnectionString

 

Настройка строки подключения

 

ConnectionTimeout

 

Установить время тайм-аута

 

DataBase

 

Установить имя базы данных

 

DataSource

 

Установить имя источника

 

Open()

 

Открыть соединение с базой данных

 

Provider

 

Установить имя провайдера

 

State

 

Получить информацию о состоянии соединения

 

В строке, создаваемой ниже для объекта соединения Cnt, указано имя провайдера Microsoft.Jet.OLEDB.4.0, а также адрес базы данных на локальной машине.

Dim Cnt As New OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0; _

Data Source= c:\_Pro\P651\P651\BIN\DEBUG\auto.mdb")

После настройки строки соединения требуется создать запрос к базе данных Cmd – объект класса OleDbCommand (члены класса в табл. 9.4) и открыть сеанс соединения с источником данных с помощью метода Open.

Dim Cmd As New OleDbCommand(“Select * from Ts”, Cnt) Cnt.Open()

 

Таблица 9.4

 

Члены класса OleDbCommand

 

 

 

Член класса

Описание

Cancel()

Прекращает выполнение команды

 

CommandText

Позволяет задать текст запроса на языке SQL

 

Connection

Позволяет получить ссылку на объект OleDbConnection

 

ExecuteReader()

Возвращает объект OleDbDataReader

 

Prepare()

Готовит команду к выполнению

 

 

Построение команды SQL

Обработка и анализ данных осуществляется посредством запроса, одним из параметров которого является объект соединения Cnt, а

104

другим – команда на языке SQL, например, команда просмотра всех записей таблицы Владельцы:

OleDbCommand Cmd1 = new _ OleDbCommand("SELECT * FROM владельцы", Cnt)

В данной команде использована простейшая форма оператора SELECT, который предназначен для выборки данных:

SELECT список_столбцов FROM имя_таблицы

Столбцы в списке перечисляются через запятую, но если требуется выбрать все столбцы, то вместо списка указывается символ «*». Для отбора части строк в команду добавляется слово WHERE с соответствующим условием, например:

OleDbCommand Cmd1 = new OleDbCommand( _ "SELECT * FROM владельцы WHERE возраст>50", Cnt)

Для построения условий служат слова и символы, перечисленные в табл. 9.5.

 

Таблица 9.5

Элементы условия запроса

 

 

Элементы

Описание

 

 

=, < >, <, >, >=, <=

Операторы сравнения

 

 

AND, OR, NOT

Логические операторы

 

 

BETWEEN знач1 AND знач2

Проверка на принадлежность интервалу

 

 

IN (знач1, знач2, …)

Проверка на принадлежность списку

 

 

IS NULL

Проверка на пустое значение

 

 

IS NOT NULL

Проверка на непустое значение

 

 

LIKE шаблон

Проверка на соответствие шаблону

 

 

При описании шаблона LIKE используются символы: % – для произвольного количества символов; знак подчеркивания – для одного символа.

Упорядочение строк выполняется с помощью добавления в команду слова ORDER BY с указанием столбца, по которому должна выполняться сортировка в порядке возрастания. Если требуется сортировка по убыванию, то к ORDER BY добавляется параметр

DESC.

OleDbCommand Cmd1 = new OleDbCommand( _ "SELECT * FROM владельцы WHERE возраст>50 _ ORDER BY возраст DESC", Cnt)

105

Для отбора всех данных, за исключением повторяющихся, применяется ключевое слово DISTINCT, например следующая команда позволяет получить список фамилий (упорядоченный):

OleDbCommand Cmd1 = new OleDbCommand( _ "SELECT DISTINCT фамилия FROM владельцы", Cnt)

Изменение данных в таблице осуществляется с помощью оператора Update, один из вариантов формата которого

UPDATE имя_таблицы SET имя_столбца_1 = значение_1, _ имя_столбца_2 = значение_2, имя_столбца_3 = значение_3, . . .

Значением может быть константа или выражение, например: OleDbCommand Cmd2 = new OleDbCommand( _

"UPDATE Ts SET стоимость=стоимось*1.05)

После выполнения данного запроса все значения столбца Стоимость будут умножены на 1,05. Есть возможность применить команду Update только к тем строкам, которые удовлетворяют некоторому условию. Для этого в запрос добавляется слово Where с соответствующим условием. Например, следующий запрос изменяет поле Стоимость в тех строках, в которых значение текстового поля Модель начинается с букв ВАЗ.

OleDbCommand Cmd2 = new OleDbCommand( _ "UPDATE Ts SET стоимость=стоимось*1.15 _ WHERE модель LIKE ‘ВАЗ%’ ”)

Для того чтобы очистить значения столбца, используем константу Null, как в следующей строке:

OleDbCommand Cmd2 = new OleDbCommand( _ "UPDATE владельцы SET нарушения=NULL)

Чтение информации из базы данных

Класс OleDbDataReader предоставляет простой способ получения информации от источника данных. Этот класс предоставляет доступный только для чтения поток данных, который за один раз возвращает одну строку в ответ на запрос SQL. Создается объект класса OleDbDataReader с помощью метода ExecuteReader,

например объект Rd для определенного выше запроса Cmd: Dim reader As OleDbDataReader = Cmd.ExecuteReader()

106

Чтение записей выполняется последовательно (от первой к последней) с помощью метода Read.

Rd.Read()

Одно выполнение Read возвращает одну строку таблицы. Доступ к значениям столбцов после чтения строки выполняется по их индексу, начиная с 0, или по имени столбца. Например, в следующей строке один столбец выбирается по номеру, а другой по имени:

Console.WriteLine(Rd(0).ToString() + Rd(“фамилия”))

Некоторые методы класса OleDbDataReader перечислены в табл.

9.6.

Таблица 9.6

 

Методы класса OleDbDataReader

Член класса

Описание

FieldCount

Возвращает количество столбцов таблицы

GetName

Имя столбца

GetType

Тип данных столбца

GetDouble

Возвращает значения столбца типа double

GetInt32

Возвращает значения столбца типа int

GetString

Возвращает значения столбца типа string

GetValue

Возвращает значения столбца в собственном формате

Read

Читает очередную запись

Close

Закрывает объект класса OleDbDataReader

Закрывается объект класса OleDbDataReader с помощью метода

Close: reader.Close()

Для одного подключения OleDbConnection можно открыть более одного объекта DataReader. Если объект OleDbConnection выходит за границы области действия, он не закрывается. Поэтому следует в явном виде закрыть подключение, вызвав метод Close или Dispose либо воспользовавшись объектом OleDbConnection в операторе

Using:

Using connection As New OleDbConnection(connectionString)

Данная команда объявляет начало блока Using и получает системные ресурсы, которыми управляет блок. За нею следует блок операторов, запускаемый блоком Using. Завершается блок командой End Using, которая завершает определение блока и удаляет все ресурсы, которыми он управляет. Это делает ресурсы доступными

107

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

Пример 9.1

создается соединение с базой данных

Using connection As New OleDbConnection(connectionString)

‘ задается запрос

Dim command As New OleDbCommand(queryString, connection)

открывается соединение connection.Open()

создается объект OleDbDataReader

Dim reader As OleDbDataReader = command.ExecuteReader()

при каждом повторении цикла читается одна строка

While reader.Read()

значения столбцов из прочитанной строки выводятся на экран

Console.WriteLine(reader(0).ToString())

End While reader.Close() End Using

Пример программы

В программе выполняется чтение строк таблицы Stud из базы данных Prim.mdb. Выражение System.IO.Path.GetFullPath(".")

возвращает полный путь в текущий каталог, в котором расположена база данных. Создаются несколько запросов: фильтр, сортировка, модификация данных. В процедуре ReadData cоздается объект Rd класса OleDbDataReader. В цикле с помощью метода Read последовательно читаются строки таблицы. Отметим, что запрос Update только модифицирует, но не выполняет выборку данных, поэтому модифицированные им данные выводятся только по следующему за ним запросу Select.

108

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]