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

C# 我可以在ADO.NET中使用T-SQL try-catch吗,c#,sql-server,ado.net,C#,Sql Server,Ado.net,在ADO.NET中,我们有启动事务、读取查询结果等方法。 我的问题是,如果我只是将这些T-sql语句包含到命令文本中,然后将它们包含到执行查询中,那么像begintransaction这样的T-sql语句,尤其是TRY-CATCH会起作用吗 mySqlCommand.CommandText = @"BEGIN TRY SELECT TOP 1 [id] FROM myTable; END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS Erro

在ADO.NET中,我们有启动事务、读取查询结果等方法。 我的问题是,如果我只是将这些T-sql语句包含到命令文本中,然后将它们包含到执行查询中,那么像
begintransaction
这样的T-sql语句,尤其是
TRY-CATCH
会起作用吗

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
有效。因此,简而言之,如果您使用的是
SQLServer2005
或更高版本,则可以。但是,最好在存储过程中使用它


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

您可以这样做(使用ExecuteScalar)

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

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

您可以这样做(使用ExecuteScalar)

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


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

o是的,我确实希望会有反对票。实际上,您应该尝试一下,并将结果作为答案发布。这就是为什么“提问”页面上的“回答您自己的问题”复选框存在的原因。如果没有人这样做,我会的。虽然,我应该做什么和不应该做什么更取决于我自己,但如果这种态度导致不良反应,请不要感到惊讶;)当然,我并不感到惊讶。正如我所说的,我预料到了这一点。虽然我相信这个问题可能对某些人有用。哦,是的,我确实希望会有反对票。事实上,你应该试试看,然后把结果作为答案发布出来。这就是为什么“提问”页面上的“回答您自己的问题”复选框存在的原因。如果没有人这样做,我会的。虽然,我应该做什么和不应该做什么更取决于我自己,但如果这种态度导致不良反应,请不要感到惊讶;)当然,我并不感到惊讶。正如我所说的,我预料到了这一点。尽管我相信这个问题可能对某些人有用。前提是使用的SQL Server版本支持TRY/CATCH。前提是使用的SQL Server版本支持TRY/CATCH。