VS.NET(C#)提升-2.23_数据库接口:SqlCommand对象异步执行案例代码

执行Command对象命令时,需要等待命令完成才能执行其他操作

比如,执行ExcuteNonQuery()方法,应用程序将会保持阻塞,直到数据操作成功完成或者异常终止以及连接超时。

异步执行的思想是,在执行命令操作时,无需等待命令操作完成,可以并发的处理其他操作。

BeginExecuteNonQueryEndExcuteNonQuery就是一对典型的为异步操作服务的方法。

BeginExecuteNonQuery方法返回System.IAsyncResult接口对象。我们可以根据IAsyncResult的IsCompleted属性来轮询(检测)命令是否执行完成。

案例代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace sqlCommand
{
    class Program
    {
        static void Main(string[] args)
        {
            sqlCommandExe();
        }

        private static SqlConnectionStringBuilder getConnDbStr()
        {
            //1.构造连接字符串
            SqlConnectionStringBuilder connStr = new SqlConnectionStringBuilder();
            connStr.DataSource = "192.168.1.20";
            connStr.InitialCatalog = "mshDB_Debug";
            connStr.UserID = "developer";
            connStr.Password = "developer";
            connStr.Pooling = true;
            connStr.MaxPoolSize = 40000;
            connStr.MinPoolSize = 1;
            connStr.AsynchronousProcessing = true; //显示说明异步操作
            return connStr;
        }

        private static StringBuilder getExeSqlStr()
        {
            //2.构造查询语句字符串
            StringBuilder m_strSQL = new StringBuilder();

            //比如,插入50万个测试用户
            for (int i = 1; i <= 500000; ++i)
            {
                m_strSQL.Append("insert into tb_user(u_name,u_pwd,u_sex,u_age,u_class,u_address,u_phone) ");
                m_strSQL.Append("values('");
                string name = "测试客户" + i.ToString();
                m_strSQL.Append(name);
                m_strSQL.Append("','123456','女',20,'406','浙江省平湖市实验小学','13967310'); ");
            }
            return m_strSQL;
        }

        private static void sqlCommandExe()
        {
            //3.执行一个SQL语句,按以下步骤进行
            //3.1生成一个数据库连接对象
            SqlConnectionStringBuilder strConn = getConnDbStr();//获取连接字符串
            SqlConnection conn = new SqlConnection(strConn.ConnectionString);

            //3.2生成SqlCommand对象
            StringBuilder strSQL = getExeSqlStr();
            SqlCommand cmd = new SqlCommand(strSQL.ToString(), conn);
            cmd.CommandType = CommandType.Text;

            //3.3 开始异步执行
            try
            {
                double time = 0;
                conn.Open(); //打开数据库连接
                Console.WriteLine("Data is inserted beigin...\nTotal coast {0}s", time * 0.001);
                IAsyncResult pending = cmd.BeginExecuteNonQuery(); //开始执行异步操作
                
                //检查异步处理状态
                while (pending.IsCompleted == false)
                {
                    System.Threading.Thread.Sleep(1);
                    time++;
                    Console.WriteLine("{0}s", time * 0.001);
                    
                }
                if (pending.IsCompleted == true)
                {
                   Console.WriteLine("Data is inserted completely...\nTotal coast {0}s", time * 0.001);
                    
                }
                cmd.EndExecuteNonQuery(pending);//结束异步操作
            }
            catch (Exception e)
            {
                //
                Console.WriteLine(e.Message);
            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }
            Console.Read();
        }
    }
}
 

开启SQLServer 资源调控器


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值