我有一个网页,其编码结构如下:
SqlConnection conX =new SqlConnection(blablabla);
conX.Open();
SqlTransaction tran=conX.BeginTransaction();
try{
SqlCommand cmdInsert =new SqlCommand("INSERT INTO Table1(ColX,ColY) VALUES @x,@y",conX);
cmdInsert.Transaction=tran;
cmdInsert.ExecuteNonQuery();
SqlCommand cmdSelect=new SqlCOmmand("SELECT * FROM Table1",conX);
cmdSelect.Transaction=tran;
SqlDataReader dtr=cmdSelect.ExecuteReader();
//read stuff from dtr
dtr.Close();
cmdInsert=new SqlCommand("UPDATE Table2 set ColA=@a",conX);
cmdInsert.Transaction=tran;
cmdInsert.ExecuteNonQuery();
//display MiscMessage
tran.Commit();
//display SuccessMessage
}
catch(Exception x)
{
tran.Rollback();
//display x.Message
}
finally
{
conX.Close();
}
因此,在 MiscMessage 之前,一切似乎都有效。然后,过了一会儿(可能是 15 秒?) x.Message 弹出,说:
“超时已过。在操作完成之前超时时间已过或服务器没有响应。”
所以我的 trans.Commit() 有什么问题吗?数据库未更新,因此我假设 trans.Rollback 有效...
我已经读过死锁会导致超时......这个问题是由我从 Table1 中选择的 SELECT 语句引起的,它正被第一个 INSERT 语句使用?如果是这样,我该怎么办?如果这不是问题,那是什么?