Kann ich T-SQL try-catch in ADO.NET verwenden

In ADO.NET haben wir methods zum Starten einer Transaktion, Lesen der Abfrageergebnisse usw. Meine Frage ist, werden solche T-sql-statementen wie BEGIN TRANSACTION und besonders TRY-CATCH arbeiten, wenn ich sie einfach in Befehlstext und dann ExecuteNonQuery ?

 mySqlCommand.CommandText = @"BEGIN TRY SELECT TOP 1 [id] FROM myTable; END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber; END CATCH;" var result = mySqlCommand.ExecuteScalar(); // or just mySqlCommand.ExecuteNonQuery() 

PS: Ich weiß, ich kann das nur selbst testing. Aber ich frage das als SO. So dass danach jemand wie ich in der Lage sein wird, einfach so zu gehen. Also, offensichtlich, ich erwarte keine Antworten wie "warum nicht einfach versuchen". Vielen Dank.

Jeder gültige T-SQL oder eine gespeicherte Prozedur gilt für SqlCommand.CommandText . Also kurz, ja kannst du, wenn du SQL server 2005 oder höher einsetzst. Allerdings wäre es am besten, dies in einer gespeicherten Prozedur zu verwenden.

https:

Sie können dies tun (mit ExecuteScalar)

Aber es fügt keinen Wert hinzu, weil Sie .net error handling irgendwie haben sollten. Lassen Sie uns sagen, Sie haben einen Varchar aus dem SELECT aber int aus dem CATCH-Block auch: Sie haben jetzt 2 verschiedene datatypen zu konsumieren.

TRY / CATCH ist eher für gespeicherte Prozeduren gedacht und behandelt Transaktion, wie pro verschachtelte gespeicherte Prozeduren mit TRY CATCH ROLLBACK-Muster?