"scope"という名前のトランザクションをロールバックしたいが、scope2という内部トランザクションをロールバックしないでください。しかし、彼らは両方のロールバック!オプションTransactionScopeOption.Suppressが機能しません...TransactionScopeOption.Suppressがネストされたトランザクションロールバック
私はすでにDTCを有効にしていますが、.NET 4.0とMicrosoft SQl Server 2008でVisual Studio 2010を使用しています。 何が問題なのですか?
using (SqlConnection conn = new SqlConnection(@"Data Source=.\DEVELOPER;Initial Catalog=TestDatenbank;Integrated Security=sspi"))
{
using (TransactionScope scope = new TransactionScope())
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "UPDATE Orders SET ID='111'";
cmd.ExecuteNonQuery();
using (TransactionScope scope2 = new TransactionScope(TransactionScopeOption.Suppress))
{
SqlCommand cmd1 = new SqlCommand();
cmd1.Connection = conn;
cmd1.CommandText = "UPDATE Orders SET OrderName='aaa'";
cmd1.ExecuteNonQuery();
scope2.Complete();
}
//scope.Complete();
}
}
お返事ありがとうございます!
私はついに復活!
using (SqlConnection conn = new SqlConnection(@"Data Source=.\DEVELOPER;Initial Catalog=TestDatenbank;Integrated Security=sspi"))
{
using (TransactionScope scope = new TransactionScope())
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "UPDATE Orders SET ID='111'";
cmd.ExecuteNonQuery();
using (SqlConnection conn2 = new SqlConnection(@"Data Source=.\DEVELOPER;Initial Catalog=AdventureWorks;Integrated Security=sspi"))
{
using (TransactionScope scope2 = new TransactionScope(TransactionScopeOption.Suppress))
{
conn2.Open();
SqlCommand cmd1 = new SqlCommand();
cmd1.Connection = conn2;
cmd1.CommandText = "UPDATE Henrik SET ID='111'";
cmd1.ExecuteNonQuery();
scope2.Complete();
}
}
//scope.Complete();
}
}
1つの奇妙なことは、私がscope2.Complete()行を削除するときです。 //scope.Complete();を置き換えます。スコープで.Complete();私は、次のことを期待:
範囲は scope2が戻っ
が、実際にロールバックされますが実行されます。 スコープは scope2に実行されます。また、
任意のアイデアを実行されます???????