我SqlTransaction
在我的代码中使用 s 来进行回滚。在事务中,我有多个要执行的语句可能包括选择插入和更新。所有这些陈述都在sqltransaction
. 一切正常,只针对一个问题。我将datareader
s 用于选择语句。这些阅读器一旦使用就关闭。这迫使连接丢失,一切都失败了。有人对我是否可以datareader
在 a 中使用 s有解决方案sqltransaction
吗?
问问题
5720 次
2 回答
4
CommandBehavior.CloseConnection
只有在调用时设置了该选项,DataReader 才会关闭连接ExecuteReader
。
如果您避免设置此选项,您应该没问题。
于 2012-07-12T14:01:25.123 回答
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();
}
于 2012-07-12T14:02:04.017 回答