2012-09-27 9 views
8

zurück Ich habe mit dieser Sache für die letzte Stunde zu kämpfen und ich bin sicher, dass ich etwas kleines vermisse, ich habe eine gespeicherte Prozedur in SQL Server 2008 und C# -Code, die ich zurückgeben möchte die Ausgabeparameter meiner gespeicherten Prozedur.Gespeicherte Prozedur Ausgangsparameter gibt @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;` 

Ausgang:

@Score 

Was möglicherweise falsch mit mir sein kann, oder meinen Code. Bitte helfen Sie!

Antwort

12

Sie müssen nur die tatsächlichen Werte auslesen von Ihrem Ausgangsparameter:

SScore = outScore.Value; 

Der .ToString() nicht den Wert zurück - den Namen des Parameters zurückgibt statt ...

Weitere Informationen finden Sie unter MSDN documentation on SqlParameter.

+0

Danke für die Antwort, ich habe das auch versucht, offensichtlich den Fehler kann Objekt nicht konvertieren. Konvertiert es in eine Zeichenfolge, aber dann wird nichts angezeigt, obwohl ich jedes Mal Daten einfüge. Denkst du, es ist vielleicht die Art, wie ich Output-Parameter bekomme? Gibt es einen besseren Weg, dies zu tun? –

0

müssen nur dies tun. Bevor die Ausgangsparameter bekommen müssen Sie den Datenleser als

reader.Close(); 

schließen und Sie dann Ausgabeparameter als

SScore = outScore.Value.Tostring(); 

für weitere Hilfe wenden diese http://msdn.microsoft.com/en-us/library/ms971497

+0

Bitte fügen Sie eine Erklärung zu Ihrer Antwort hinzu – Huangism

0

> Versuchen Sie, diese seine Arbeits erhalten Fein für den Mehrfachausgangsparameter:

 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();       
      } 
     }