数据库最好不用长链接,长链接并发测试(事务)
//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,发现会丢单!

浙公网安备 33010602011771号