【问题标题】:C#: Running a transaction on SQL Server 2008 via ADO.NETC#:通过 ADO.NET 在 SQL Server 2008 上运行事务
【发布时间】:2012-08-15 14:30:55
【问题描述】:

使用以下方法,我可以使用 ADO.NET 对 Oracle 数据库运行事务。当我在 SQL Server 数据库上尝试相同的代码时,我得到了显示的错误。这是什么原因造成的,如何解决?

错误:

ExecuteNonQuery 要求命令有一个事务,当 分配给命令的连接处于挂起的本地事务中。 该命令的 Transaction 属性尚未初始化。

守则:

    /// <summary>
    /// A method to run transactional SQL on a database. Does not return a record set.
    /// </summary>
    /// <param name="transactions">A list of commands</param>
    /// <returns>A boolean indicator of success</returns>
    public bool ExecuteTransactionNonQuery(List<string> transactions)
    {
        if (transactions == null)
        {
            throw new ArgumentNullException("transactions");
        }

        PrepareConnection();

        DbTransaction dbTransaction = DBFactoryDatabaseConnection.BeginTransaction();

        try
        {
            foreach (var transaction in transactions)
            {

                DBFactoryDatabaseCommand.CommandText = transaction;
                DBFactoryDatabaseCommand.CommandType = CommandType.Text;
                DBFactoryDatabaseCommand.ExecuteNonQuery();
            }

            dbTransaction.Commit();
        }
        catch(Exception ex)
        {
            dbTransaction.Rollback();
            try
            {
                Close();
            }
            catch (Exception f)
            {
                throw new Exception("Error: Transaction execute failed on the database. " + ex.Message + ". Following that the application failed to close the connection. " + f.Message + ". ExecuteTransactionNonQuery().");
            }
            throw;
        }
        finally
        {
            dbTransaction.Dispose();
        }

        return true;
    }

【问题讨论】:

  • 将 Command.Transaction 属性设置为事务。

标签: c# ado.net transactions


【解决方案1】:

您需要将事务分配给命令

DBFactoryDatabaseCommand.Transaction = dbTransaction;

【讨论】:

  • 你能在我的代码中显示该行需要放在哪里吗?我假设在分配命令文本之后?每次执行时都必须这样做吗?
  • 它需要在DBFactoryDatabaseCommand.ExecuteNonQuery()之前。如果连接与事务相关联,那么是的,它每次都需要分配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多