c# - 此 SqlTransaction 已完成;它不再可用,为什么?

标签 c# asp.net .net c#-4.0 ado.net

代码:

我正在尝试运行这个函数,但它抛出错误: 这个SqlTransaction已经完成;它不再可用。

我用过所有其他方法,但没有用。我在没有 USING 的情况下使用它,但仍然出现同样的错误。

为什么?

public Boolean AddWorkProgress(int WorkID, int ContractorID, float PhysicalProgress, 
  decimal FinancialProgress, int UserID, int OrgID, float FinancialProgressPecentage)
{
   SqlCommand SqlCom = new SqlCommand("AddWorkProgress", DataBaseConnection.OpenConnection());
   SqlCom.CommandType = CommandType.StoredProcedure;

   using (SqlTransaction sqlTrans = SqlCom.Connection.BeginTransaction()) 
   {
      SqlCom.Transaction = sqlTrans;

      try
      {
         SqlCom.Parameters.AddWithValue("@Work_ID", WorkID);
         SqlCom.Parameters.AddWithValue("@Contractor_ID", ContractorID);
         SqlCom.Parameters.AddWithValue("@PhysicalProgress", PhysicalProgress);
         SqlCom.Parameters.AddWithValue("@FinancialProgress", FinancialProgress);
         SqlCom.Parameters.AddWithValue("@OrgID", OrgID);
         SqlCom.Parameters.AddWithValue("@fk_WebUsers_UserID", UserID);
         SqlCom.Parameters.AddWithValue("@FinancialProgressPercentage", FinancialProgressPecentage);
         SqlParameter SqlParamReturnStatus = new SqlParameter("@ReturnStatus", SqlDbType.Bit);
         SqlCom.Parameters.Add(SqlParamReturnStatus);
         SqlParamReturnStatus.Direction = ParameterDirection.Output;
         SqlParameter SqlParamReturnStatusMessage = new SqlParameter("@ReturnStatusMessage", SqlDbType.VarChar, -1);
         SqlCom.Parameters.Add(SqlParamReturnStatusMessage);
         SqlParamReturnStatusMessage.Direction = ParameterDirection.Output;
         SqlCom.ExecuteNonQuery();
         DataBaseConnection.CloseConnection();

         string ReturnStatusMessage = Convert.ToString(SqlParamReturnStatusMessage);
         Boolean ReturnStatus = Convert.ToBoolean(SqlParamReturnStatus.Value);
         // ProgressID = Convert.ToInt64(SqlParamReturnProgressID.Value);

         sqlTrans.Commit();
         return ReturnStatus;
      }

      catch (Exception ex)
      {
         sqlTrans.Rollback();
         sqlTrans.Dispose();

         throw ex;
      }
   }
}

最佳答案

您在提交交易之前关闭连接:

DataBaseConnection.CloseConnection();
// skipped code
sqlTrans.Commit();

MSDN 开始:

Both Commit and Rollback generates an InvalidOperationException if the connection is terminated or if the transaction has already been rolled back on the server.

这正是您的情况 - 连接在提交/回滚事务之前关闭。

关于c# - 此 SqlTransaction 已完成;它不再可用,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42717423/

相关文章:

c# - ASP.NET 身份并发登录

c# - 将数据从 Controller 传递到 View - MVC

c# - 如何在运行时仅在类上添加属性?

c# - 这两种说法是同一回事吗?

C#:判断一个类是否已经初始化

c# - DataGridViewCellStyle.Padding 属性不是填充?

c# - 命名 View "Properties"

asp.net - 在 ASP.NET 中启用未处理异常的事件日志记录

ASP.NET MVC 4 异步数据库调用 : never returns the HTTP response

.net - 如何删除 XML 文件中的重复值并保留最后一个值?