2011-06-30 2 views
0

J'essaye d'appeler une procédure stockée dans mon site asp.net dans C#. J'utilise une classe SqlCommand et appelle ExecuteQuery(). La valeur de retour est -1?Comment vérifier la valeur de retour pour executequery dans C# dans sql server 2005?

La procédure stockée fonctionne, je l'ai testé dans SQL Management Studio. Comment puis-je obtenir une description d'erreur plus détaillée?

+0

peut vous poster le code? –

+2

System.Data.SqlClient.SqlCommand n'a pas de méthode ExecuteQuery ... –

+0

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

Répondre

1

Mon premier port d'appel serait d'exécuter SQL Server Profiler dans SQL Server Management Studio afin que vous puissiez voir exactement quel SQL est exécuté sur la base de données. Lorsque vous avez cela, exécutez le SQL dans SQL Server Management Studio et vous serez en mesure de déterminer s'il s'agit d'une erreur SQL ou non. Postez-vous avec vos conclusions.

0

Votre procédure stockée doit être comme ci-dessous. Voir pour Error_Message et Error_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 

Votre code devrait être comme ci-dessous

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"]); 
     } 
    } 
} 

De cette façon, vous pouvez saisir le numéro de message/d'erreur d'erreur de procédure stockée si elle retourne une

Questions connexes