命令的事务属性尚未初始化

本文关键字:初始化 属性 事务 命令 | 更新日期: 2023-09-27 18:34:22

我正在尝试使用事务运行ExecuteNonQuery,但不断收到此错误

OleDbException:ExecuteNonQuery要求命令具有 分配给命令的连接位于 挂起的本地事务。 命令的事务属性 尚未初始化。

这是我的代码:问题出在哪里?

 _dataManager = new DataManager();
        bool bTrance = false;
        _dataManager.BuildConnectionString("server", "MyId", "MyPwd");
        _dataManager.Connect();
        try
        {
            Console.WriteLine("Begin Trans");
            var res = _dataManager.BeginTransaction();              
            if (res)
            {
                bTrance = true;
                Console.WriteLine(" Trans Success");
            }
            Console.WriteLine("Query Executed");
            return _dataManager.ExecuteQuery("call SP_MySp");
        }
        catch (OleDbException objDBExc)
        {
            Console.WriteLine("OleDbException : " + objDBExc.Message);
            if (bTrance)
            {
                _dataManager.RollbackTransaction();
            }
            return false;
        }
        catch (Exception objExc)
        {
            Console.WriteLine("OleDbException : " + objExc.Message);
            if (bTrance)
            {
                bTrance = false;
                _dataManager.RollbackTransaction();
            }
            return false;
        }
        finally
        {
            Console.WriteLine("Done!");
            if (bTrance)
            {
                _dataManager.CommitTransaction();
            }
        }
 public class DataManager
{

    private OleDbConnectionStringBuilder dbConnStr;
    private OleDbConnection dbConn;
    private OleDbTransaction dbTransaction;
    private OleDbCommand dbCommand;
    private bool beginTransaction;

 public bool BeginTransaction()
    {
        try
        {
            if (beginTransaction == false)
            {
                dbTransaction = dbConn.BeginTransaction();
                dbCommand.Transaction = dbTransaction;
                beginTransaction = true;
            }
            else
                dbCommand.Transaction = dbTransaction;
        }
        catch (Exception)
        {
            throw;
        }
        return beginTransaction;
    }
 public bool ExecuteQuery(string command)
    {
        try
        {   
            dbCommand.ExecuteNonQuery();
        }
        catch (OleDbException objDbEx)
        {
            throw;
        }
        catch (Exception objEx)
        {
            throw;
        }
        dbCommand.Parameters.Clear();
        dbCommand.Connection = null;
        return true;
    }

}

命令的事务属性尚未初始化

调用 SqlConnection 对象的 BeginTransaction 方法来标记事务的开始。方法返回对事务的引用。此引用分配给事务中登记的 SqlCommand 对象。

将事务对象分配给要执行的 SqlCommand 的事务属性。如果在具有活动事务的连接上执行命令,并且尚未将事务对象分配给命令对象的事务属性,则会引发异常。

执行所需的命令。

调用 SqlTransaction 对象的 Commit 方法以完成事务,或调用 Rollback 方法中止事务。如果在执行提交或回滚方法之前关闭或释放连接,则会回滚事务。

請參閱 https://msdn.microsoft.com/en-us/library/2k2hy99x(VS.80).aspx