zoukankan      html  css  js  c++  java
  • 使用Command 对象进行异步操作

      在ado.net2.0发步这前,通过Command执行sql命令的线程必须等待执行结果.现在需要确保当存储过程在执行时,应用程序任能响应用户请求.
     
      下面我们来看一个最简单的实例:

            SqlConnection conn =new SqlConnection ("server=.\\sqlexpress;database=wtqtest;Integrated Security=sspi;");

            
    private void button1_Click(object sender, EventArgs e)
            {
                
    try
                {
                   conn.Open();
                    
    string strCmd = "waitfor delay '00:00:05';select fname from mytable1";
                    SqlCommand cmd 
    = new SqlCommand(strCmd, conn);

                    SqlDataReader dr 
    = cmd.ExecuteReader();
                    
    while (dr.Read())
                    {
                        
    this.textBox1.Text += dr[0].ToString();
                    }

                }
                
    catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

    //在这里,是连接的2005数据库,大家应该看到了此连接要沿时05秒钟,而在这05秒内你是什么也不能做的,你的应用程序会处于一种"卡死"状态.
           
            下面我们改一改 try 里的代码,并且在连接字符串中加上"Asynchronous Processing=true",其它代码不变:

     try
                {
                    conn.Open();
                    
    string strCmd = "waitfor delay '00:00:05';select fname from mytable1";
                    SqlCommand cmd 
    = new SqlCommand(strCmd, conn);

                    IAsyncResult result 
    = cmd.BeginExecuteReader();//当执行到这段代码时就开始开始执行sql语句了

                    
    while (!result.IsCompleted) //判断是否已经完成sql语句查询完成,如果没完成就可以执行其它代码
                    {
                        MessageBox.Show(
    "正在等待sql执行..!");//在这里可以添加异步代码
                    }//在五秒钟的等待中,它将不断的显示这个对话框.表明程序并没有"卡死".
                     
                    
    //如果已经完成查询就可以把结果传给 dr 并用dr.Read()读取结果
                    using (SqlDataReader dr = cmd.EndExecuteReader(result))
                    {
                        
    while (dr.Read())
                        {
                            
    this.textBox1.Text += dr[0].ToString();
                        }
                    }
                    conn.Close();
                }

    //呵呵,这个议题就说到这里了,,其实我也明白它的大致意思,就是想不到它的实用的地方,如果哪位朋友知道请与我交流
           一下,呵呵,谢谢大家的支持了...

  • 相关阅读:
    杭电 Problem
    杭电Problem 5053 the sum of cube 【数学公式】
    杭电 Problem 2089 不要62 【打表】
    杭电 Problem 4548 美素数【打表】
    杭电 Problem 2008 分拆素数和 【打表】
    杭电 Problem 1722 Cake 【gcd】
    杭电 Problem 2187 悼念512汶川大地震遇难同胞——老人是真饿了【贪心】
    杭电Problem 1872 稳定排序
    杭电 Problem 1753 大明A+B
    东北林业大 564 汉诺塔
  • 原文地址:https://www.cnblogs.com/wantingqiang/p/1301078.html
Copyright © 2011-2022 走看看