Re: "Зависание" окна при выполнении SQL запроса
От: DemAS http://demas.me
Дата: 02.09.04 08:08
Оценка: 2 (1)
Здравствуйте, misha_v, Вы писали:

_>Программа на С# кладет в MSSQL и достает обратно BLOB — данные.

_>Все работает , но окошко замирает до окончания выполнения SqlCommand (Insert или Select). КАК отобразить на форме, что программа не висит, а выполняет запрос??? Как узнать время выполнения и процент?(windows ведь показывает при копировании файлов например)???

Выполняй в отдельном потоке. Вот пример:

        using System.Threading;
   using System.IO;
   using System.Data;
   using System.Data.SqlClient;

   namespace Chapter 02
   {
     public class Threaded Resource : System.Windows.Forms.Form
     {
       public void Button1 Click(object sender , System.EventArgs e)
       {
         Thread t = new Thread(new ThreadStart(QueryData));
         t.Start();

       }

       public void QueryData()
       {
         SqlDataReader objReader;
         SqlConnection objConn;
         SqlCommand objCommand;
         int intEmployeeID;
         string strFirstName;
         string strTitle;
         int intReportsTo;
         objConn = new SqlConnection("server=RemoteServer;" +
             "UID=RemoteUser;PWD=Password;database=northwind");
         objCommand = new SqlCommand("SELECT EmployeeID, FirstName, " +
             "Title, ReportsTo FROM Employees", objConn);
         objConn.Open();
         objReader = objCommand.ExecuteReader(
             CommandBehavior.CloseConnection );

         while (objReader.Read())
         {
           intEmployeeID = objReader.GetInt32(0);
           strFirstName = objReader.GetString(1);
           strTitle = objReader.GetString(2);
           if(objReader.IsDBNull(3))
             intReportsTo = 0;
           else
             intReportsTo = objReader.GetInt32(3);

           listBox1.Items.Add(intEmployeeID.ToString() + " " +
               strFirstName + " " + strTitle + " " +
               intReportsTo.ToString());
         }
         objReader.Close();
         objConn.Close();
       }

       public static void Main()
       {
         Application.Run(new Threaded_Resource());
       }
     }
   }
... << RSDN@Home 1.1.4 @@subversion >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.