Ich überprüfe gerade den Code eines Kollegen von mir und stolperte über ein Konstrukt, das ich noch nie zuvor gesehen habe:
%Vor%Mit:
%Vor%Nun, soweit ich es verstehe, können alle, aber wirklich schwere Fehler auf diese Weise erfasst werden (17+ Klassenfehler nicht, da sie Ausnahmen bleiben). Nun, was ich bekomme, ist, dass Sie in einigen Fällen nicht wollen, dass eine Ausnahme geworfen und eingefangen wird, sondern dass Sie sie als Info-Nachricht (oder als Flag gesetzt) wollen. In diesem Fall sehe ich das als nützliches Konstrukt.
Im Fall des Codes, den ich überarbeite, wird das errors
sofort überprüft, nachdem der Befehl sql ausgeführt wurde und dann eine Ausnahme als Text ausgegeben wurde.
Das brachte mich dazu, mich zu fragen, ob ich es richtig sehe, dass dies den einzigen Vorteil negiert, den ich sehen könnte, wenn ich die Infomeldung überhaupt erfassen würde.
Also meine Frage hier ist: Was sind die Vorteile der Erfassung der Info-Nachrichten von SQL-Verbindungen?
Oder mit anderen Worten, ist der einzige Vorteil, den ich gesehen habe, der einzige, oder übersehe ich dort zusätzliche?
Es ist nicht sinnlos.
Wie Sie bereits erwähnt haben, löst ein SQL-Fehler mit einem Schweregrad von 17 oder höher eine Ausnahme aus, die die Ausführung des SQL-Befehls stoppt . Mit einem try catch-Block können Sie diese Ausnahme erfassen.
Wenn der Schweregrad jedoch kleiner als 17 ist, wird die Ausführung des Befehls nicht gestoppt und SQL wirft keine Ausnahmen auf. Mit InfoMessage können Sie diese Warnungen und Informationsnachrichten vom SQL Server erfassen.
Jetzt ist die Magie Ihres Codes in dieser Aussage:
%Vor%Wenn Sie die restlichen Anweisungen in einem Befehl weiterverarbeiten möchten, unabhängig von Fehlern, die vom Server verursacht werden, , legen Sie die Eigenschaft FireInfoMessageEventOnUserErrors von fest SqlConnection auf wahr. Dies bewirkt, dass die Verbindung das InfoMessage-Ereignis für Fehler auslöst, statt eine Ausnahme auszulösen und die Verarbeitung zu unterbrechen.
Weitere Informationen finden Sie im
Fehler wie InfoMessages behandeln
Abschnitt in diesem MSDN-Artikel: Ссылка
>