Начальство поручило написать утилитку, которая будет уметь делать backup/restore базы данных. Написание сиквельного кода особых проблем не представляет, но для верности и первого теста решил поглядеть как это делает сам Enterprise Manager, получилос вот что:
BACKUP DATABASE [test] TO DISK = N'C:\\test.bak' WITH INIT , NOUNLOAD , NAME = N'test backup', NOSKIP , STATS = 10, NOFORMAT
So far so good. Прогнав это в query analizer'е, увидел, что, действительно, сообщения о процентах выполненой работы исправно приходят во время выполнения команды, и обрадовался, думая, что смогу просто сделать прогресс-бар в своей проге. Но не тут-то было. Приведенный ниже код вываливает все сообщения только после того, как комманда закончила выполняться, что, конечно, не может радовать:
private void BackupDatabase()
{
SqlConnection con = new SqlConnection("server=(local);integrated security=true");
con.Open();
SqlCommand com = new SqlCommand("<тут наша команда>");
com.Connection = con;
con.InfoMessage += new SqlInfoMessageEventHandler( SqlMessageArrived );
com.ExecuteNonQuery();
con.Close();
}
private void button1_Click(object sender, System.EventArgs e)
{
ThreadStart start = new ThreadStart( BackupDatabase );
Thread myThread = new Thread( start );
myThread.Start();
}
Быть может, кто-то уже наступал на мои грабли? Или вообще невозможно получить сообщения от сиквела (средствами классов, которые входят в .net framework, пока команда выполняется? Пока не пробовал с oledb-аналогами, но есть предчуствие, что не поможет...