2016-04-15 5 views
1

アプリケーション「使用」が「低」で挿入が行われている場合、次のコードが機能しています。私は、接続を開こうとするとcon.Open()が例外に失敗するIsolationLevelスナップショットを使用したトランザクションを昇格できない

はできるだけ早く私は、高い使用を持っていて、IsolationLevelをスナップショットと私はエラーを取得しています

取引は

を推進することはできません。 "cn.Open()"という行で例外が発生しています。

私は0または1、 または0または1でis_read_commited_snapshot_onsnapshot_isolation_stateでデータベースを設定することを試みた....と私もC#のコード上でトランザクションを使用しようとしました...しかし、それはノー作ら差。

私はこの問題を解決するにはどうすればよい

....私はちょうどインサート(なし更新を)作りたい、この場合には取引を気にしませんか?

マイコード:

var connectionString = @"data source=XXXX\SQL2005;initial catalog=pw_LogDBStack;user id=XXXX;password=XXXX;"; 
string query = "INSERT INTO LogEntry (DateTime, CallerMethod, Stack, Query) VALUES (@DateTime, @CallerMethod, @Stack, @Query)"; 
//SqlTransaction transaction = null; 
using (SqlConnection cn = new SqlConnection(connectionString)) 
{ 
    cn.Open(); 
    //transaction = cn.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted); 
    //using (SqlCommand cmd = new SqlCommand(query, cn, transaction)) 
    using (SqlCommand cmd = new SqlCommand(query, cn)) 
    { 
     cmd.Parameters.AddWithValue("@DateTime", DateTime.Now); 
     cmd.Parameters.AddWithValue("@CallerMethod", callerMethod); 
     cmd.Parameters.AddWithValue("@Stack", stackStr); 
     cmd.Parameters.AddWithValue("@Query", c.Command.ToTraceString()); 
     cmd.ExecuteNonQuery(); 
    } 
    //transaction.Commit(); 
    cn.Close(); 
} 
+0

にプロパティを追加することによってこの問題を解決することができたあなたは、呼び出し元のコードのいずれかでのTransactionScopeを使用していますか? –

答えて

2
+0

これは、コードを呼び出すスレッドがすでにアンビエントトランザクションを持っていることを示唆しています。これは通常、コールスタックのどこかでTransactionScopeクラスを使用して行われます。 Enlistmentをオフにすることで、コードを大域トランザクションから切断し、別々にコミットまたはロールバックすることを意味します。 –

+0

@MartinBrownさんのご意見ありがとうございました。問題の説明はわかりませんでした。 – Dryadwoods

関連する問題