我需要使用 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)
是的,事务和命令需要相互关联。
一些经过编辑的示例代码:
// 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)
| 归档时间: |
|
| 查看次数: |
6150 次 |
| 最近记录: |