我在c#上使用IDBConecction接口使用嵌套事务。我必须将方法插入到2个不同的表中,但是当涉及到第二个插入时,第一个插入事务会锁定第二个插入事务,从而导致超时异常。
public void FirstInsert()
{
using (var cn = new Connection().GetConnection())
{
cn.Open();
using (var tran = cn.BeginTransaction())
{
try
{
//1st insert
SecondInsert() //calling second insert method
tran.Commit();
}
catch
{
tran.Rollback();
}
}
}
}
public void SecondInsert()
{
using (var cn = new Connection().GetConnection())
{
cn.Open();
using (var tran = cn.BeginTransaction())
{
try
{
//2nd insert, this one fails
tran.Commit();
}
catch
{
tran.Rollback();
}
}
}
}
当我检查SqlServer时,fisrt插入的SPID为56,那么当使用SPID 57执行第二次插入时,我使用
exec sp_who2
在SPID 57的“BlkBy”列中,它表示它被SPID 56阻止。
我怎样才能克服这些问题?