【发布时间】:2020-02-25 09:14:18
【问题描述】:
我编写的存储过程具有读取未提交事务隔离级别,但是当连接超时时,SQL 中的 catch 中的回滚不起作用。
当我在.Net的业务层中使用SqlTransaction时,问题就解决了
并且我可以在.Net 中的try... catch 中支持SQL 中发生的任何错误。
这是我做对了吗?
using (SqlConnection conn = new SqlConnection(Data.DataProvider.Instance().ConnectionString))
{
conn.Open();
SqlTransaction tran = conn.BeginTransaction(IsolationLevel.ReadUncommitted, "Trans");
try
{
object ores = SqlHelper.ExecuteScalar(.......)
string res = ores.ToString();
if (string.IsNullOrEmpty(res))
{
tran.Rollback();
info.TrackingCode = "";
return 0;
}
else if (res == "-4")
{
tran.Rollback();
return -4;
}
else if (res == "-1")
{
tran.Rollback();
return -1;
}
else
{
tran.Commit();
return 1;
}
}
catch (Exception)
{
tran.Rollback();
info.TrackingCode = "";
return 0;
}
【问题讨论】:
-
我用的是SqlServer
-
您是否在存储过程的主体中启动事务?
-
第一次是的,但是当没有发生回滚时,我想在.Net中使用事务
-
你能提供一些你的 SQL 代码来找出那里可能发生的事情吗?
-
无论如何,这两种方式都是等价的。但在业务层的情况下,您可以通过多次查询执行来处理事务。
标签: c# sql-server transactions