我在代码中使用SqlTransaction
来进行回滚。在事务中,我得到了多个要执行的语句,可能包括选择插入和更新。所有这些陈述都属于sqltransaction
的范围。一切都可以解决一个问题。我正在使用datareader
s来表示select语句。这些读者一旦使用就会被关闭。这会强制连接丢失,每件事都会失败。有没有人能解决我是否可以在datareader
??
sqltransaction
的问题
答案 0 :(得分:4)
如果在调用CommandBehavior.CloseConnection
时设置了ExecuteReader
选项,DataReader将仅关闭连接。
如果您避免设置此选项,则应该没问题。
答案 1 :(得分:2)
您应该自己打开SqlConnection 关闭DataReader
时,SqlDataReader不会关闭SqlConnection例如:
using(SqlConnection cn = GetConnection())
{
cn.Open();
SqlTransaction tr = cn.BeginTransaction("myTransaction");
.....
SqlCommand command = new SqlCommand(sqlString, cn);
using(SqlDataReader reader = command.ExecuteReader())
{
.....
}
SqlCommand command1 = new SqlCommand(sqlString1, cn);
using(SqlDataReader reader1 = command1.ExecuteReader())
{
.....
}
tr.Commit();
}