2016-07-12 7 views
0

Ich versuche, eine C# -Methode zu schreiben, um die Identitätsspezifikation festzulegen. Aber es funktioniert nicht. Das ist mein Code:Einstellung der Identitätsspezifikation in C# -Code

 string sql = "SET IDENTITY_INSERT " + table + " ON"; 
     string sql2 = "SET IDENTITY_INSERT " + table + " OFF"; 

     SqlCommand cmd = new SqlCommand(sql, conn); 
     SqlCommand cmd2 = new SqlCommand(sql2, conn); 

     conn.Open(); 

     if (identity == true) 
     { 
      cmd.ExecuteReader(); 
     } 
     else 
     { 
      cmd2.ExecuteReader(); 
     }    

     conn.Close(); 
    } 

Die Begriffe "Tabelle" und "Identität" sind Parameter.

Mache ich etwas falsch? Kannst du mir bitte helfen?

Vielen Dank!

+3

Haben Sie 'cmd.ExecuteNonQuery()'? – sstan

+0

Ihr Code unterliegt der SQL-Injektion. Verwenden Sie Parameter (oder gespeicherte Prozeduren). – oleksii

+0

Hinweis: Sag niemals: "Es funktioniert nicht". Sagen Sie uns stattdessen, was Sie für möglich gehalten haben und zeigen Sie uns, was tatsächlich passiert ist. –

Antwort

1

Das Problem ist nicht mit Ihrem Code, aber mit Ihrer Logik. Einstellen IDENTITY_INSERT, zusammen mit lots of other settings wird auf einer Basis pro-Sitzung durchgeführt:

Die Transact-SQL-Programmiersprache mehr SET-Anweisungen bereitstellt, die den aktuellen Sitzung Umgang mit spezifischen Informationen ändern .

(Hervorhebung von mir)

Sobald die Verbindung geschlossen ist, wird die Sitzung gegangen, und daher ist die Einstellung auch verschwunden.

Sie müssen Ihren Code so umformulieren, dass er die Einstellung IDENTITY_INSERT enthält, sodass er sich in der gleichen Sitzung befindet wie der Code, der ihn verwendet.

+0

Lassen Sie mich erklären, was ich versuche zu tun: Ich muss Daten in eine Tabelle namens "Kunde" einfügen. Also, ich höre auf Ihren Tipp, ich habe die Insert-Anweisung unter der Indentity-Anweisung (innerhalb der gleichen Methode) codiert, aber es gibt einen Fehler, der mir sagt, dass ich keine Daten einfügen kann, da die "Identity-Spezifikation" auf OFF gesetzt ist. Was ich nicht verstehe, ist, warum die Identität weiterhin auf OFF gesetzt wird, während ich eine Anweisung habe, die es auf ON setzt, in der gleichen Methode. –

Verwandte Themen