Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 581
Эндрю Троелсен
static void Main(string[] args) {
Console.WriteLine ("***** Забавы с ASNYC DataReader *****\n");
// Создание открытого соединения в асинхронном режиме.
SqlConnection cn = new SqlConnection();
cn.ConnectionString = "uid=sa;pwd=;Initial Catalog=Cars;" +
"Asynchronous Processing=true;Data Source=(local)";
cn.Open();
// Создание объекта SQL-команды, ожидающего около 2 с.
string strSQL = "WaitFor Delay '00:00:02';Select * From Inventory";
SqlCommand myCommand = new SqlCommand(strSQL, cn);
// Выполнение чтения во втором потоке.
IAsyncResult itfAsynch;
itfAsynch = myCornmand.BeginExecuteReader(CommandBehavior.CloseConnection);
// Выполнение действий во время работы другого потока.
while (!itfAsynch.IsCompleted) {
Console.WriteLine("Работа в главном потоке…");
Thread.Sleep(1000);
}
Console.WriteLine();
// Все готово! Выполнение цикла по результатам
// с помощью объекта чтения данных.
SqlDataReader myDataReader = myCommand.EndExecuteReader(itfAsynch);
while (myDataReader.Read()) {
Console.WriteLine("-› Марка – {0) название – {1}, цвет – {2}.",
myDataReader["Make"].ToString.Trim(),
myDataReader["PetName"].ToString().Trim()
myDataReader["Color"].ToString().Trim());
}
myDataReader.Close();
}
Первый интересным моментом здесь является то, что вы должны разрешить асинхронное взаимодействие с помощью нового сегмента Asynchronous Processing в строке соединения. Также отметьте, что в текст объекта команды SqlCommand был добавлен сегмент WaitFor Delay для имитации длительного взаимодействия с базой данных.
Кроме этого обратите внимание на то, что вызов BeginExecuteDataReader() возвращает ожидаемый IAsyncResult-совместимый тип, который используется для синхронизации потока вызова (с помощью свойства IsCompleted), а также для получения SqlDataReader по завершении выполнения запроса.
Исходный код. Проект AsyncCmdObject размещен в подкаталоге, соответствующем главе22.
Несвязный уровень ADO.NET
Как вы убедились, работе, со связным слоем позволяет взаимодействовать с базой данных, используя объекты соединения, команд и чтения данных. С помощью небольшого набора типов вы можете по желанию выбирать, вставлять, обновлять и удалять записи (а также запускать хранимые процедуры). Но на самом деле вы пока что узнали только половину того, что вам следует знать о возможностях ADO.NET. Поэтому напоминаем, что объектная модель ADO.NET может использоваться для взаимодействия в несвязной форме.
При работе на несвязном уровне ADO.NET вы по-прежнему должны использовать объекты соединения и команды. Кроме того, вы должны использовать специальный объект, называемый