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();
                }

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

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 进制转换
    数据备份服务商Rubrik获4000万美元B轮融资
    为QNetworkAccessManager添加超时提醒(自己记录一段时间里的下载字节数,用定时器去定期检测,从而判断是否超时)
    DIOCP3 DEMO的编译(去掉VCL前缀)
    Golang环境搭建,Notepad++配置Golang开发环境,Golang发送邮件
    川普当选对中国的好处在哪?(会注重实利,而不是虚的意识形态)
    带你走近AngularJS
    ASP.NET MVC学习之控制器篇扩展性
    微信语音识别及网页获取用户信息
    敏捷和自动化测试
  • 原文地址:https://www.cnblogs.com/wantingqiang/p/1301078.html
Copyright © 2011-2022 走看看