2011-06-30 43 views
0

我想在c#中的asp.net网站中调用存储过程。我正在使用SqlCommand类并调用ExecuteQuery()。返回值是-1?如何在sql server 2005中检查c#中executequery的返回值?

存储过程的工作原理,我在SQL Management Studio中测试它。我怎样才能得到更详细的错误描述?

+0

您可以发布代码? –

+2

System.Data.SqlClient.SqlCommand没有ExecuteQuery方法... –

+0

看看http://stackoverflow.com/questions/6210027/c-calling-sql-server-stored-procedure-with-return-value/ 6210055#6210055 –

回答

1

我的第一个入口是在SQL Server Management Studio中运行SQL Server Profiler,这样您就可以准确查看针对数据库正在执行的SQL。当你有这个SQL Server Management Studio中的SQL时,你将能够确定它是否是SQL错误。发回你的调查结果。

0

您的存储过程应该如下所示。见Error_MessageError_Number

Create Proc Testing 
As 

Set NoCount On 
Set XACT_ABORT ON 
Begin Try 
    Begin Tran 
     "Your Insert/Update Statement" 
     Select '' as 'Message', 0 as 'Number' 
    Commit Tran 
End Try 
Begin Catch 
    Select Error_Message() as 'Message', Error_Number() as 'Number' 
    Rollback Tran 
End Catch 

您的代码应该像下面

string str; 
int number; 
using (System.Data.SqlClient.SqlConnection con = new SqlConnection("YourConnection string")) { 
    con.Open(); 
    SqlCommand cmd = new SqlCommand(); 
    string expression = "Parameter value"; 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.CommandText = "Your Stored Procedure"; 
    cmd.Parameters.Add("Your Parameter Name", 
       SqlDbType.VarChar).Value = expression;  
    cmd.Connection = con; 
    using (IDataReader dr = cmd.ExecuteReader()) 
    { 
     if (dr.Read()) 
     { 
      str = dr["Message"].ToString(); 
      number = Convert.ToInt16(dr["Number"]); 
     } 
    } 
} 

通过这种方式,你可以从存储过程中捕获错误消息/错误号码,如果返回任何