从存储过程获取Error_Number()到调用.NET应用程序
问题描述:
您好,将Error_Number()
从存储过程传递到调用.NET应用程序的最佳方式是什么?从存储过程获取Error_Number()到调用.NET应用程序
我知道我们可以通过设置输出参数或通过SELECT
查询来完成。
注意:我正在使用数据读取器。
在此先感谢。
答
你可以尝试这样做 - 赶上你Error_number()
在SQL try/catch
块,然后产生一个错误,你可以在一个SqlException
.NET应用程序赶上。
在SQL存储过程:
BEGIN TRY
-- do something here....
END TRY
BEGIN CATCH
DECLARE @ErrorNumber INT
SELECT @ErrorNumber = ERROR_NUMBER()
RAISERROR
(N'The error code is: %d',
16, -- Severity.
1, -- State.
@ErrorNumber, -- First substitution argument.
''); -- Second substitution argument.
END CATCH;
和.NET代码(位置:C#):
// call your stored proc some way...
using(SqlConnection conn = new SqlConnection("server=.;database=Test;Integrated Security=SSPI;"))
using (SqlCommand cmd = new SqlCommand("dbo.YourStoredProcNameHere", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
// possibly add parameters to the stored procedure call....
try
{
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
catch (SqlException ex)
{
// catch SqlException - ex.ErrorNumber contains your error number
string msg = string.Format("Error number: {0}/Message: {1}", ex.Number, ex.Message);
}
}
答
试试这个:
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;
+0
@ Royi..Thanks。 。但是,除了SELECT查询,我们还有其他解决方案吗?就像我需要知道commandobject或reader的任何属性是否设置了错误号。 – Ananth 2012-02-12 15:17:24
谢谢。 Iam与datareader合作。此解决方案适用于数据读取器吗? – Ananth 2012-02-12 17:18:45
@Ananth:如果在SQL Server中发生了RAISERROR,那么你的C#代码会被异常中断 - 并且你的数据读取器被中止,并且控制权转移到.NET中'try/catch'块的catch中。应用程序。所以是的 - 它适用于datareader .... – 2012-02-12 17:19:46
@marc_s ..我得到了我正在寻找的答案..它是ex.Number其中有错误号..谢谢..但提出错误不适用于数据读者。 sp中的select查询工作正常,并且错误从未发生,尽管RAISERROR语句刚好在SELECT查询之后被写入 – Ananth 2012-02-14 10:11:00