我可以在ADO.NET中使用T-SQL try-catch吗?



ADO中。NET中有用于启动事务、读取查询结果等的方法。我的问题是,这样的T-sql语句,如BEGIN TRANSACTION,特别是TRY-CATCH工作,如果我只是包括他们的命令文本,然后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:我知道,我可以自己测试一下。但我问这个问题。这样一来,像我这样的人就可以在谷歌上搜索了。所以,很明显,我不希望得到"为什么不试试"这样的答案。谢谢你。

任何有效的T-SQL或存储过程都对SqlCommand.CommandText有效。简而言之,如果您使用SQL Server 2005或更高版本,则可以。但是,最好在存储过程中使用它。

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtext.aspx

你可以这样做(使用ExecuteScalar)

但是它没有增加任何值,因为无论如何你应该有。net错误处理。假设您有一个来自SELECT的varchar,但也有一个来自CATCH块的int:现在您有两种不同的数据类型要使用。

TRY/CATCH更适用于存储过程和处理事务,因为嵌套存储过程包含TRY CATCH ROLLBACK模式?

最新更新