



























WAITFOR DELAY '00:01'下面我要说的是一个谋杀了我的同事不少青春的问题。关于ADO.NET 和 sql server transaction.
听起来都不难。难么请看下面这段代码,然后回答后面的问题。
using (SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=Test;Integrated Security=SSPI;"))
{
conn.Open();
string sql = "begin transaction t1 INSERT INTO [Test].[dbo].[Table_1] ([id]) VALUES (12) WAITFOR DELAY '00:01'; commit transaction t1 delete from [Test].[dbo].[Table_2] where id = 2";
SqlCommand comm = new SqlCommand(sql, conn);
comm.ExecuteNonQuery();
}
问题
经过实验发现
后果如此严重,恐怖吧。
解决方案
使用ADO.NET中的事物,
Table_1 就不会被lock住了。
using (SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=Test;Integrated Security=SSPI;"))
{
conn.Open();
SqlTransaction sqlTran = conn.BeginTransaction();
string sql = "begin transaction t1 INSERT INTO [Test].[dbo].[Table_1] ([id]) VALUES (12) WAITFOR DELAY '00:01'; commit transaction t1 delete from [Test].[dbo].[Table_2] where id = 2";
SqlCommand comm = new SqlCommand(sql, conn);
comm.Transaction = sqlTran;
try
{
comm.ExecuteNonQuery();
sqlTran.Commit();
}
catch (Exception )
{
sqlTran.Rollback();
}
}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。