从存储过程获取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); 
    } 
} 
+0

谢谢。 Iam与datareader合作。此解决方案适用于数据读取器吗? – Ananth 2012-02-12 17:18:45

+1

@Ananth:如果在SQL Server中发生了RAISERROR,那么你的C#代码会被异常中断 - 并且你的数据读取器被中止,并且控制权转移到.NET中'try/catch'块的catch中。应用程序。所以是的 - 它适用于datareader .... – 2012-02-12 17:19:46

+1

@marc_s ..我得到了我正在寻找的答案..它是ex.Number其中有错误号..谢谢..但提出错误不适用于数据读者。 sp中的select查询工作正常,并且错误从未发生,尽管RAISERROR语句刚好在SELECT查询之后被写入 – Ananth 2012-02-14 10:11:00

试试这个:

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