ExecuteReader
Данный метод возвращает объект OleDbDataReader, который по своему назначению очень близок объекту Recordset из классического ADO. Он использует однонаправленное ForwardOnly чтение данных, реализуя подсоединенную модель доступа. Таким образом, при его использовании необходимо наличие открытого подключения к базе.
Навигация по строкам результирующего множества осуществляется при помощи метода Read(), который возвращает true в случае, если ещё остались строки и false в противном случае. При вызове метода команды ExecuteReader(), созданный им объект OleDbDataReader не спозиционирован на первой строке результирующего множества и для её прочтения необходимо сначала вызвать метод Read().
Наиболее удобным способом чтения данных из результирующего множества является использование метода Read() совместно с конструкцией while:
public void ExecuteReaderTest() { OleDbConnection con = ConnectionProvider.CreateConnection(); con.Open();
//Испольуем метод CreateCommand для создания команды
OleDbCommand cmd = con.CreateCommand(); cmd.Transaction = con.BeginTransaction(); cmd.CommandText = "select * from employee"; OleDbDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
//чтение данных
while (rdr.Read()) { string tmp =""; for(int i=0; i<rdr.FieldCount -1;i++) { if (tmp != "") tmp += "\t"; tmp += rdr[i].ToString(); }
Console.WriteLine(tmp); }
rdr.Close(); //после вызова OleDbDataReader.Close() подключение к БД будет закрыто Assert.AreEqual(ConnectionState.Closed,con.State); }
ПРИМЕЧАНИЕ.Обратите внимание, что после вызова метода OleDbDataReader.Close() подключение к базе данных будет закрыто. Это произошло потому, что я применил перегруженный метод ExecuteReader() с заданным параметром CommandBehavior.CloseConnection. По умолчанию после выполнения метода OleDbDataReader.Close() подключение к базе данных остается открытым |