2012-09-27 7 views
8

Je suis aux prises avec ce problème depuis une heure et je suis sûr qu'il me manque quelque chose de petit, j'ai une procédure stockée dans SQL Server 2008 et le code C# que je veux retourner les paramètres de sortie de ma procédure stockée.Le paramètre de sortie de la procédure stockée renvoie @Value

SQL:

Alter Procedure dbo.GetAssessment 
    @UserID int, 
    @AssessmentName varchar(255), 
    @Score varchar(100) output, 
    @Completed varchar(10) output, 
    @DisplayName nvarchar(128) output, 
    @Result varchar(2500) output 
as 
begin 
     select @Score = A.Score, @Completed = A.Completed, @DisplayName = U.Displayname, @Result = A.Result 
     from Assessment A 
      inner join Users U 
      on U.UserId = A.UserID 
     where U.UserID = @UserId 
     and AssessmentName = @AssessmentName 

end 
GO 

C#

String SScore, SName, SResult, SComp; 
      lblAsse.Text = Request.QueryString["AID"]; 

      InsertAssessment(lblAsse.Text, "No", 2, "N/A", "N/A"); 

      using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString)) 
      { 
       SqlParameter outScore = new SqlParameter("@Score", SqlDbType.VarChar,100){ Direction = ParameterDirection.Output }; 
       SqlParameter outComp = new SqlParameter("@Completed", SqlDbType.VarChar,10){ Direction = ParameterDirection.Output }; 
       SqlParameter outName = new SqlParameter("@DisplayName", SqlDbType.NVarChar, 128) { Direction = ParameterDirection.Output }; 
       SqlParameter outResult = new SqlParameter("@Result", SqlDbType.VarChar,2500){ Direction = ParameterDirection.Output };    

       conn.Open(); 
       SqlCommand cmd = new SqlCommand(); 
       cmd.Connection = conn; 
       cmd.CommandType = System.Data.CommandType.StoredProcedure; 
       cmd.CommandText = "GetAssessment"; 
       cmd.Parameters.AddWithValue("@AssessmentName", lblAsse.Text); 
       cmd.Parameters.AddWithValue("@UserId", 2); 
       cmd.Parameters.Add(outScore); 
       cmd.Parameters.Add(outComp); 
       cmd.Parameters.Add(outName); 
       cmd.Parameters.Add(outResult); 
       cmd.ExecuteScalar(); 

       SScore = outScore.ToString(); 
       SName = outName.ToString(); 
       SResult = outResult.ToString(); 
       SComp = outComp.ToString(); 

       conn.Close(); 

       lblAsse.Text = SScore;` 

Sortie:

@Score 

Que peut-être pas avec moi ou mon code. S'il vous plaît aider!

Répondre

12

Il vous suffit de lire les valeurs réelles de vos paramètres de sortie:

SScore = outScore.Value; 

Le .ToString() ne retourne pas la valeur - elle renvoie le nom du paramètre à la place ...

Voir le MSDN documentation on SqlParameter pour plus de détails.

+0

Merci pour la réponse, j'ai essayé cela aussi, évidemment obtenir l'erreur ne peut pas convertir l'objet. Convertis en chaîne, mais rien ne s'affiche même si j'insère des données à chaque fois. Pensez-vous que c'est peut-être la façon dont j'obtiens les paramètres de sortie? Y a-t-il une meilleure manière de faire cela? –

0

juste besoin de faire cela. Avant d'entrer les paramètres de sortie, vous devez fermer le lecteur de données comme

reader.Close(); 

et vous obtenez alors des paramètres de sortie comme

SScore = outScore.Value.Tostring(); 

pour plus d'aide consulter ce http://msdn.microsoft.com/en-us/library/ms971497

+0

S'il vous plaît ajouter quelques explications à votre réponse – Huangism

0

> Essayer cette son travail amende pour le paramètre de sortie multiple:

 using (SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["conStringEndicia"].ConnectionString)){ 

      using (var sqlCmd = new SqlCommand("endicia.credentialLookup", sqlConnection)) 
      { 

       sqlCmd.CommandType = System.Data.CommandType.StoredProcedure; 
       sqlCmd.Parameters.AddWithValue("@accountNumber", accountNumber); 
       SqlParameter outLogin = new SqlParameter("@login", SqlDbType.NVarChar, 100) { Direction = ParameterDirection.Output }; 
       sqlCmd.Parameters.Add(outLogin); 
       SqlParameter outPassword = new SqlParameter("@password", SqlDbType.NVarChar, 100) { Direction = ParameterDirection.Output }; 
       sqlCmd.Parameters.Add(outPassword); 
       sqlConnection.Open(); 
       sqlCmd.ExecuteNonQuery(); 
       string login, password; 
       login = outLogin.Value.ToString(); 
       password = outPassword.Value.ToString();       
      } 
     } 
Questions connexes