使用 Connection.CreateCommand() 时是否需要将 ADO.NET 事务分配给命令对象?

Cha*_*lds 7 c# ado.net

我需要使用 ADO.NET 提供程序的事务。

下面是一个正在创建的连接、事务和命令的简单示例。当我使用创建命令时connection.CreateCommand(),是否需要将事务分配给命令?或者,事务设置是因为我正在使用connection.CreateCommand()vs 新建命令对象?

var connection = Database.GetConnection();
connection.Open();

var transaction = connection.BeginTransaction();

var command = connection.CreateCommand();
command.Transaction = transaction; // Is this line needed when using connection.CreateCommand()?
Run Code Online (Sandbox Code Playgroud)

*更新*

当我测试两个对象的引用时,它们是相同的。我认为这意味着connection.CreateCommand()返回一个分配了事务的命令。或者这可能不是一个有效的测试。

using (var connection = Database.GetConnection())
{
    connection.Open();

    var transaction = connection.BeginTransaction();

    var command = connection.CreateCommand();

    if (object.ReferenceEquals(transaction, command.Transaction))
        Debug.WriteLine("EQUAL");
}
Run Code Online (Sandbox Code Playgroud)

HAB*_*ABO 2

是的,事务和命令需要相互关联。

一些经过编辑的示例代码:

// Connect to the database.
SqlConnection connection = new SqlConnection(Database.ConnectionString);
connection.Open();

// Start a transaction.
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.Transaction = connection.BeginTransaction(System.Data.IsolationLevel.Serializable, "ryan");

// Delete any previously associated targets.
command.CommandType = System.Data.CommandType.StoredProcedure;
command.CommandText = "FirstSP";
command.Parameters.AddWithValue("@Id", this.Id);
command.ExecuteNonQuery();

// Add the specified targets to the product.
command.CommandText = "SecondSP";
command.Parameters.Add("@Id", SqlDbType.Int);
foreach (int Id in Ids)
{
    command.Parameters["@Id"].Value = Id;
    command.ExecuteNonQuery();
}

// Commit the transaction.
command.Transaction.Commit();

// Houseclean.
connection.Close();
Run Code Online (Sandbox Code Playgroud)