在 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:我知道,我可以自己测试一下。 但我这样问这个问题。所以,之后像我这样的人将能够谷歌那个。所以,显然,我不希望像“为什么不试试”这样的答案。谢谢。
答案 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更适用于存储过程和处理事务