2012-09-27 8 views
8

Mam problem z tym przez ostatnią godzinę i jestem pewien, że brakuje mi czegoś małego, mam procedurę przechowywaną w SQL Server 2008 i kod C#, który chcę zwrócić parametry wyjściowe mojej procedury przechowywanej.Parametr wyjściowy procedury zapisanej zwraca @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;` 

wyjściowa:

@Score 

Co może być może być nie tak ze mną lub moim kodu. Proszę pomóż!

Odpowiedz

12

Wystarczy odczytać rzeczywiste wartości od parametrów wyjściowych:

SScore = outScore.Value; 

.ToString() nie zwraca wartości - zwraca nazwę parametru zamiast ...

Aby uzyskać więcej informacji, patrz MSDN documentation on SqlParameter.

+0

Dzięki za odpowiedź, spróbowałem również, oczywiście, błąd nie może przekonwertować obiektu. Przekonwertowałem go na ciąg znaków, ale wtedy nic nie wyświetla się, mimo że wstawiam dane za każdym razem. Czy myślisz, że to może sposób, w jaki uzyskuję parametry wyjściowe? Czy jest lepszy sposób to zrobić? –

0

wystarczy to zrobić. przed uzyskaniem parametrów wyjściowych należy zamknąć czytnik danych jako

reader.Close(); 

a następnie dostać się parametry wyjściowe jako

SScore = outScore.Value.Tostring(); 

aby uzyskać pomoc skonsultować to http://msdn.microsoft.com/en-us/library/ms971497

+0

Proszę dodać wyjaśnienie do swojej odpowiedzi – Huangism

0

> Wypróbuj swoją pracę w porządku dla parametru o wielu wyjściach:

 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();       
      } 
     } 
Powiązane problemy