C# 从存储过程到调用.NET应用程序获取错误号

C# 从存储过程到调用.NET应用程序获取错误号,c#,exception,exception-handling,ado.net,sqldatareader,C#,Exception,Exception Handling,Ado.net,Sqldatareader,您好,将错误号()从存储过程传递到调用的.NET应用程序的最佳方法是什么 我知道我们可以通过设置输出参数或通过SELECT查询来实现 注意:我使用的是数据读取器 提前感谢。试试这个: BEGIN TRY -- Generate a constraint violation error. END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber ,ERROR_SEVERITY() AS Er

您好,将
错误号()从存储过程传递到调用的.NET应用程序的最佳方法是什么

我知道我们可以通过设置输出参数或通过
SELECT
查询来实现

注意:我使用的是数据读取器

提前感谢。

试试这个:

BEGIN TRY
    -- Generate a constraint violation error.

END TRY
BEGIN CATCH
    SELECT 
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_LINE() AS ErrorLine
        ,ERROR_MESSAGE() AS ErrorMessage;


END CATCH;
试试这个:

BEGIN TRY
    -- Generate a constraint violation error.

END TRY
BEGIN CATCH
    SELECT 
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_LINE() AS ErrorLine
        ,ERROR_MESSAGE() AS ErrorMessage;


END CATCH;

您可以尝试这样做-在SQL
try/catch
块中捕获您的
Error\u number()
,然后引发一个错误,您可以在.NET应用程序中将其作为
SqlException
捕获

在SQL存储过程中:

开始尝试
--在这里做点什么。。。。
结束尝试
开始捕捉
声明@ErrorNumber INT
选择@ErrorNumber=ERROR\u NUMBER()
拉丝误差
(N'错误代码为:%d',
16,--严重性。
1,--状态。
@ErrorNumber,--第一个替换参数。
'');              -- 第二个替代论点。
末端捕捉;
在.NET代码中(此处:C#):


您可以尝试这样做-在SQL
try/catch
块中捕获您的
Error\u number()
,然后引发一个错误,您可以在.NET应用程序中将其作为
SqlException
捕获

在SQL存储过程中:

开始尝试
--在这里做点什么。。。。
结束尝试
开始捕捉
声明@ErrorNumber INT
选择@ErrorNumber=ERROR\u NUMBER()
拉丝误差
(N'错误代码为:%d',
16,--严重性。
1,--状态。
@ErrorNumber,--第一个替换参数。
'');              -- 第二个替代论点。
末端捕捉;
在.NET代码中(此处:C#):


@罗依……谢谢。但除了选择查询之外,还有其他解决方案吗?。就像我需要知道commandobject或reader的任何属性是否会设置错误号一样。@Royi..谢谢。但除了选择查询之外,还有其他解决方案吗?。我需要知道commandobject或reader的任何属性是否会设置错误号。谢谢。我正在使用数据阅读器。此解决方案适用于数据读取器吗?@Ananth:如果SQL Server中发生
RAISERROR
,您的C#代码将因异常而中断-您的数据读取器将被中止,控制权将转到.NET应用程序中
try/catch
块中的
catch
。因此,是的-它与数据阅读器一起工作…@marc_.s。。我得到了我想要的答案。它是带有错误号的ex.Number。谢谢。但是raise error不适用于数据读取器。sp中的select查询工作正常,虽然RAISERROR语句是在select查询之后编写的,但从未引发过错误。在catch块中使用ROLLBACK TRAN时,如何使用此方法?当我使用ROLLBACK TRAN关键字时,aps.net不会进入异常块谢谢。我正在使用数据阅读器。此解决方案适用于数据读取器吗?@Ananth:如果SQL Server中发生
RAISERROR
,您的C#代码将因异常而中断-您的数据读取器将被中止,控制权将转到.NET应用程序中
try/catch
块中的
catch
。因此,是的-它与数据阅读器一起工作…@marc_.s。。我得到了我想要的答案。它是带有错误号的ex.Number。谢谢。但是raise error不适用于数据读取器。sp中的select查询工作正常,虽然RAISERROR语句是在select查询之后编写的,但从未引发过错误。在catch块中使用ROLLBACK TRAN时,如何使用此方法?当我使用ROLLBACK TRAN关键字时,aps.net不会进入异常块