【发布时间】:2011-06-03 10:21:23
【问题描述】:
使用 SQL Server 2005。
每次接收到新数据时,它都会被存储起来,然后调用一个 SP,它使用这些数据来计算一些统计数据。存储数据和调用 SP 在单个事务中执行。 SP 在事务中登记,如
using (var transaction = session.BeginTransaction())
{
// ... executing insert/update statements ...
var command = new SqlCommand("StoredProcedureName", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@name", value));
transaction.Enlist(command);
command.ExecuteNonQuery();
transaction.Commit();
}
运行 SQL Profiler 时,我可以看到所有插入/更新语句仅在调用 transaction.Commit(); 方法后显示在那里,但 SP 调用在调用 command.ExecuteNonQuery(); 方法后立即显示。因此,SP 调用显示在 SQL Profiler 中的插入/更新语句之前。这让我觉得 SP 实际上是在任何逻辑错误的插入/更新语句之前执行的。
问题是为什么在调用command.ExecuteNonQuery(); 方法而不是transaction.Commit(); 之后,SP 调用会显示在SQL Profiler 中?是不是意味着它是立即执行而不是在执行插入/更新语句之后?
【问题讨论】:
-
会话是什么,事务是什么类型?
-
NHibernate.ISession 和通常的显式 SQL 事务
标签: sql-server stored-procedures ado.net transactions