2012-09-27 16 views
8

Estoy luchando con esto durante la última hora y estoy seguro de que me falta algo pequeño, tengo un procedimiento almacenado en SQL Server 2008 y un código C# que deseo devolver los parámetros de salida de mi procedimiento almacenado.El parámetro de salida de procedimiento almacenado devuelve @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;` 

Salida:

@Score 

¿Qué puede estar mal conmigo o mi código. ¡Por favor ayuda!

Respuesta

12

sólo tiene que leer los valores reales de sus parámetros de salida:

SScore = outScore.Value; 

El .ToString() no devuelve el valor - devuelve el nombre del parámetro en lugar ...

Vea el MSDN documentation on SqlParameter para más detalles.

+0

Gracias por la respuesta, lo intenté también, obviamente, obtener el error no puede convertir el objeto. Lo convertí en una cadena, pero luego no se muestra nada a pesar de que inserto datos cada vez. ¿Crees que es quizás la forma en que obtengo los parámetros de salida? ¿Hay una mejor manera de hacer esto? –

0

solo necesita hacer esto. Antes de conseguir los parámetros de salida debe cerrar el lector de datos como

reader.Close(); 

y luego obtener los parámetros de salida como

SScore = outScore.Value.Tostring(); 

para obtener más ayuda consulte este http://msdn.microsoft.com/en-us/library/ms971497

+0

Agregue algunas explicaciones a su respuesta – Huangism

0

> Probar su trabajo bien para el parámetro de salida múltiple:

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