【发布时间】:2018-07-05 14:11:07
【问题描述】:
我遇到了相同的错误,我看到多个线程有,在谷歌搜索 2 天后,我似乎无法解决这个问题,我不明白为什么。我简化了一些与 sqltransaction 部分无关的代码。
conn.Open();
using (SqlTransaction sqlTran = conn.BeginTransaction())
{
SqlCommand command = new SqlCommand("", conn, sqlTran);
log.Info("Connection Opened");
foreach (var eventData in reqData)
{
ProcessMessage(eventData, req, conn, log, sqlTran, command);
}
sqlTran.Commit();
sqlTran.Dispose();
}
conn.Close();
public static void ProcessMessage(JObject messageData, HttpRequestMessage req, SqlConnection conn, TraceWriter log, SqlTransaction sqlTran, SqlCommand command)
{
//query building stuff
PerformTransaction(req, query, conn, log, sqlTran, command);
}
public static void PerformTransaction(HttpRequestMessage req, string query, SqlConnection conn, TraceWriter log, SqlTransaction sqlTran, SqlCommand command)
{
try
{
command.ExecuteNonQuery();
log.Info("Query Executed Successfully");
}
catch
{
log.Info("Transaction Execution Error");
sqlTran.Rollback();
throw;
}
}
【问题讨论】:
-
鉴于您的错误消息提到了
ExecuteReader,我倾向于认为问题不在此代码块中,因为没有调用ExecuteReader。也许您在同一事务中的其他地方调用它,但忘记在命令对象上设置 sqlTran? -
就是这样,我无法将评论标记为答案,但我们的谈话确实帮助我更好地组织了我的代码。
-
我很高兴能提供帮助。对于信息,您的原始语句集非常适合一个事务中的多个插入。我对插入、删除和更新使用了类似的方法
标签: c# sql-server