Wenn ich SqlCommand.ExecuteNonQuery()
verwenden und seine CommandText
hat eine GO
(commit) es, ich bekomme eine SQLException.Verwenden GO (commit) in einem SqlCommand.ExecuteNonQuery()
Ich habe es entfernt und die SQL funktionierte, aber die ganze SQL hat viele Anweisungen und ich möchte nach jedem von ihnen commit ausführen. Und ich möchte sie nicht in mehrere SqlCommand
Objekte teilen.
Gibt es eine bessere Lösung zu halten und ein einzigartiges SqlCommand
Objekt zu halten?
Dank. Entschuldigung, ich habe nicht verstanden, was du meinst. Schlägst du vor, die SQL-Zeichenfolge in mehreren Läufen zu teilen, oder? Ich wollte alle Operationen in einer eindeutigen Zeichenkette behalten und 'SqlCommand.ExecuteNonQuery()' einmal für alle ausführen. Ist das wirklich unmöglich? – Hikari
Es ist möglich, aber Sie müssen die "GO" -Linien entfernen. "GO" ist nicht dasselbe wie ein Transaktions-Commit. 'GO' wird von Batch-Skript-Prozessoren (osql, SQL Studio-Skript) interpretiert, um den Code als Einheit auszuführen, sodass Sie beispielsweise mehrere DDL-Anweisungen wie' CREATE VIEW' verketten können, was sonst nicht möglich ist. Wenn Sie also das "GO" entfernen, besteht die Gefahr, dass das resultierende Skript fehlschlägt. Ich empfehle eine Schleife. Sie können immer noch dasselbe 'SqlCommand'-Objekt wiederverwenden, weisen Sie einfach den' CommandText' neu zu, mit vernachlässigbarer Leistungseinbuße. – dlatikay
Also sind Protokolle nicht an MDF-Dateien gebunden, wenn ein 'GO'-Befehl ausgeführt wird? Wenn das der Fall ist, werde ich es einfach entfernen und so sei es. – Hikari