|
Устройства считывания данных
Следующим примером станет использование
классов ADO.NET для получения доступа к данным,
хранящимся в базе данных. Соответствующие
файлы находятся в подпапке Connected.
Нам необходимы объекты для соединения, хранения команд, передаваемых базе данных,
и хранения самих данных, поэтому мы определяем три указателя на объекты классов
SqlConnection, SqlCommand и SqlDataReader:
SqlConnectlon *conn = 0;
SqlCommand * command = 0;
SqlDataReader *reader = 0;
Далее инициализируется строка соединения с базой данных Вы можете изменить
значение поля, предназначенного для хранения имени сервера, на имя своего компьютера
Необходимо также определить имя пользователя и пароль для получения доступа
к базе данных Строку соединения можно устанавливать и как свойство объекта SqlConnection
В качестве команды, которая будет передаваться базе данных в нашем примере,
выбран простой оператор отбора данных:
String *ConnString =
"server=localhost;
uid=sa;
pwd=;
database=Northwind";
String *cmd =
"select Customerld,
CompanyName from Customers";
На рис. 9.2 приведены списки таблиц и хранимых процедур базы данных Northwmd
В теле блока try создается объект класса SqlConnection. Затем открывается соединение
с базой данных, ведь это должно быть сделано до передачи базе данных какой-либо
команды После этого создается объект класса SqlCommand, связанный с созданным
ранее соединением.
conn = new SqlConnection(ConnString);
conn->0pen(); // Открыть
command = new SqlCommand(cmd, conn);
Рис. 9.2. Таблицы и хранимые процедуры, входящие в состав базы
данных Northwind, отображаются в окне Server Explorer
Если команда выполняется посредством
использования метода ExecuteReader объекта SqlCommand,
то при этом возвращается экземпляр класса
SqlDataReader Этот объект можно использовать для
перемещения по полученному набору данных
Для извлечения данных из текущей строки
набора можно использовать имя столбца
reader = command->ExecuteReader();
// читатель = команда-> ExecuteReader ();
if (reader != 0)
{
Console::WriteLine(
"CustomerldXtCompanyName");
while (reader->Read()) // Чтение
Console::WriteLine (
"{0}\t\t{l}",
reader->get_Item("Customerld"),
reader->get_Item("CompanyName"));
}
И в заключение, в блоке finally закрываются
считывающее устройство и соединение.
if (reader != 0)
reader->Close() ; if (conn->State == ConnectionState::0pen)
// если открыто
conn->Close();
Если соединение не закрыть явно,
завершитель объекта SqlConnection, рано или
поздно запущенный, закроет соединение. Но
из-за того, что сборщик мусора не является
детерминированным, никто не сможет сказать,
когда это произойдет. Поэтому всегда
закрывайте соединение явно. Если этого не
сделать, будет использоваться больше
соединений, чем необходимо (даже если вы
организуете связной пул), что может снизить
масштабируемость приложения. Кроме того,
может исчерпаться запас соединений.
Приведем результат работы программы:
Customerld CompanyName
ALFKI Alfreds Futterkiste
ANATR Ana Trujillo Emparedados у helados
ANTON Antonio Moreno Taqueria
AROUT Around the Horn
BERGS Berglunds snabbkop
BLAUS Blauer See Delikatessen
BLONP Blondesddsl pere et fils
BOLID Bolido Comidas preparadas
BONAP Bon app'
BOTTM Bottom-Dollar Markets
BSBEV B's Beverages
. . .
Для проверки корректности работы программы можно использовать Server Explorer
среды разработки Visual Studio.NET. Выберите в базе данных Northwind таблицу
Customers (Клиенты) и щелкните на ней правой кнопкой для того, чтобы вызвать
всплывающее меню. Выберите в нем пункт Retrieve Data from Table (Получить данные
из таблицы) и, просмотрев данные, хранящиеся в таблице, сравните их с результатом
работы программы. Наверняка вы заметите поразительное сходство (рис. 9.3).
Рис. 9.3. Просмотр содержимого таблицы Customers (Клиенты) и
ее полей с помощью Server Explorer
|