2016-04-15 2 views
1

Der folgende Code funktioniert, wenn die Anwendung "verwenden" ist "niedrig", das Einfügen geschieht.con.Open() fehlschlägt Ausnahme Transaktionen mit IsolationLevel Snapshot kann nicht heraufgestuft werden

Sobald ich hohe Verwendung habe, erhalte ich die Fehler

Transaktionen mit Isolation Snapshot kann nicht

gefördert werden, wenn ich versuche, die Verbindung zu öffnen. Die Ausnahme passiert in der Zeile "cn.Open()";

Ich habe versucht, die Datenbank mit snapshot_isolation_state mit 0 oder mit 1, oder is_read_commited_snapshot_on mit 0 oder 1 .... und ich habe sogar versucht zu setzen eine Transaktion auf dem C# -Code zu verwenden ... aber es machte keinen Unterschied.

ich über Transaktion in diesem Fall ist es egal, ich will nur Einsätze machen (keine Updates) ....

Wie kann ich dieses Problem beheben?

Mein Code:

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

Sie ein Transaction in jeder der anrufenden Code verwendet? –

Antwort

2

konnte ich dieses Problem beheben, indem Sie die Eigenschaft der Verbindungszeichenfolge Hinzufügen Enlist=false;

https://www.connectionstrings.com/all-sql-server-connection-string-keywords/

+0

Dies würde vorschlagen, dass der Thread, der den Code aufruft, bereits eine Ambient-Transaktion hat. Dies geschieht normalerweise mit einer TransactionScope-Klasse irgendwo im Call-Stack. Wenn Sie "Enlistment" deaktivieren, werden Sie Ihren Code von der Umgebungstransaktion trennen, was bedeutet, dass sie separat committen oder rollback werden. –

+0

@MartinBrown danke für die zusätzlichen Informationen, ich kannte die Erklärung des Problems nicht. – Dryadwoods

Verwandte Themen