gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:02:09 27 4
gpt4 key购买 nike

代码:

我正在尝试运行这个函数,但它抛出错误:这个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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com