0

ADO.NET中,我们有用于启动事务、读取查询结果等的方法。我的问题是,如果我只是将这些 T-sql 语句包含到命令文本中,那么它们是否会BEGIN TRANSACTION特别有效?TRY-CATCHExecuteNonQuery

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:我知道,我可以自己测试一下。但我这样问。这样以后像我这样的人就可以用谷歌搜索了。所以,显然,我不希望得到像“为什么不试试”这样的答案。谢谢你。

4

2 回答 2

2

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

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

于 2013-05-20T13:03:50.573 回答
2

您可以这样做(使用 ExecuteScalar)

但它没有增加任何价值,因为无论如何您都应该进行 .net 错误处理。假设您有一个来自 SELECT 的 varchar 但也来自 CATCH 块:您现在有 2 种不同的数据类型可供使用。

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

于 2013-05-20T13:05:30.647 回答