在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
或更高版本,则可以。但是,最好在存储过程中使用它。
你可以这样做(使用ExecuteScalar)
但是它没有增加任何值,因为无论如何你应该有。net错误处理。假设您有一个来自SELECT的varchar,但也有一个来自CATCH块的int:现在您有两种不同的数据类型要使用。
TRY/CATCH更适用于存储过程和处理事务,因为嵌套存储过程包含TRY CATCH ROLLBACK模式?