数据库最好不用长链接,长链接并发测试(事务)

//sqlserver中创建 数据库test

//添加表 a 字段id varchar(10)

//添加表b 字段id varchar(10)

 

//定义长链接connection

private System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection("data source=127.0.0.1;user Id=sa;password=12345;initial catalog=test");

 

//定义事务

 private SqlTransaction transaction = null;

 

//窗体加载方法

void Form1_Load(object sender, EventArgs e)       

  {            

         connection.Open();            

         transaction = connection.BeginTransaction();           

         var task1 = new Task(new Action(this.test1));

         var task2 = new Task(new Action(this.test2));       

         task1.Start();          

         task2.Start();

 

//多线程方法1

 public void test1()
        {
            var command2 = connection.CreateCommand();
            command2.Transaction = transaction;
            command2.CommandTimeout = 100;
            for (int i = 0; i < 100; i++)
            {
                command2.CommandText = "insert into  a (id) values ("+i.ToString()+")";
                command2.ExecuteNonQuery();
            }
            transaction.Commit();
        }

 

//多线程方法2

public void test2()       

  {            

   var command2 = connection.CreateCommand();            

    command2.Transaction = transaction;     

command2.CommandTimeout = 100;         

    for (int i = 0; i < 100; i++)         

    {                

         command2.CommandText = "insert into  b (id) values (" + i.ToString() + ")";        

         command2.ExecuteNonQuery();            

     }            

     transaction.Commit();

}

 

结果:在数据库中查询表a和表b,发现会丢单!

posted @ 2016-11-30 18:08  武汉程序猿  阅读(90)  评论(0)    收藏  举报