Работа с базой данных в соединенном
режиме
Использовавшийся в предыдущем примере
режим называют соединенным. Программа
соединяется с базой данных, выполняет все
необходимые действия, а затем
отсоединяется. При этом перемещаться по
данным базы можно только в одном
направлении. Это соответствует
однонаправленному курсору/набору записей в
классической технологии доступа к данным ADO.
При использовании соединенного режима
следует открывать и закрывать соединение
явно.
Держать соединение постоянно открытым —
не лучший способ работы, если вы хотите
минимизировать потребление ресурсов (соединение
само по себе недешево) для обеспечения
масштабируемости. Тем не менее, как мы
увидим позже, именно использование SqlDa-taReader
может, в зависимости от ваших потребностей,
оказаться правильным подходом.
Далее будет показано, что SqlConnection
используется вместе с DataSet (Набор данных) и
SqlDataReader для установления соединения с базой
данных так же, как это сделано выше с
помощью SqlCommand. Объект SqlConnection, кроме того,
управляет свойствами базы данных, такими,
как транзакции и уровни изоляции. Основная (root)
транзакция начинается вызовом метода
BeginTransaction класса SqlConnection". Аналогичная
строка соединения с SQL Server с использованием
объекта класса OleDbConnection будет такой:
"Provider=SQLOLEDB.1;server=localhost;uid=sa;pwd=;
database=Northwind";
В приведенной строке следует изменить на
корректные имя сервера, идентификатор и
пароль пользователя.
Как уже было сказано, SqlCommand применяется
для выполнения команд при использовании и
DataSet (Набор данных) и SqlDataReader, только
действует немного по-разному. Это станет
более понятным после рассмотрения класса
SqlDataAdapter.
Свойство CommandType определяет тип команды,
хранимой в SqlCommand. Для источника данных Sql
это может быть Text (Текст) (принятое по
умолчанию значение) или StoredProcedure (Хранимая
процедура). CommandText также можно определить
как свойство. Вскоре мы научимся
использовать параметры при работе с
командами, которые передаются базе данных.
Экземпляр класса SqlDataReader возвращается посредством метода Ехе-cuteReader
экземпляра класса SqlCommand. Если программа должна быть независима от используемого
источника данных, вместо указанного метода следует использовать интерфейс IDataReader.
При этом можно вызывать методы интерфейса, а не самого экземпляра класса.
IDataReader *idr = command->ExecuteReader() ;
Этот же прием можно использовать и для
других классов источника данных, где
реализованы интерфейсы, которые
поддерживаются несколькими источниками
данных. Пока экземпляр класса SqlDataReader не
будет закрыт, никакие действия над объектом
SqlCommand, кроме его закрытия, недоступны.
|