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

时间:2013-05-20 13:00:44

标签: c# sql-server ado.net

ADO.NET 中,我们提供了启动事务,读取查询结果等方法。 我的问题是,如果我将这些T-sql语句包含在命令文本中然后BEGIN TRANSACTION,那么这些T-sql语句是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:我知道,我可以自己测试一下。 但我这样问这个问题。所以,之后像我这样的人将能够谷歌那个。所以,显然,我不希望像“为什么不试试”这样的答案。谢谢。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

你可以这样做(使用ExecuteScalar)

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

根据Nested stored procedures containing TRY CATCH ROLLBACK pattern?

,TRY / CATCH更适用于存储过程和处理事务