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;
您可以尝试这样做-在SQLtry/catch
块中捕获您的Error\u number()
,然后引发一个错误,您可以在.NET应用程序中将其作为SqlException
捕获
在SQL存储过程中:
开始尝试
--在这里做点什么。。。。
结束尝试
开始捕捉
声明@ErrorNumber INT
选择@ErrorNumber=ERROR\u NUMBER()
拉丝误差
(N'错误代码为:%d',
16,--严重性。
1,--状态。
@ErrorNumber,--第一个替换参数。
''); -- 第二个替代论点。
末端捕捉;
在.NET代码中(此处:C#):
您可以尝试这样做-在SQLtry/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不会进入异常块