9

在过去的一个小时里,我一直在为这件事苦苦挣扎,我确定我遗漏了一些小东西,我在 SQL Server 2008 中有一个存储过程和 C# 代码,我想返回我的存储过程的输出参数。

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;`

输出 :

@Score

我或我的代码可能有什么问题。请帮忙!

4

3 回答 3

14

您只需要从输出参数中读出实际值:

 SScore = outScore.Value;

.ToString()不返回值 - 它返回参数的名称而不是......

有关详细信息,请参阅MSDN 文档。SqlParameter

于 2012-09-27T16:57:30.667 回答
0

只需要这样做。在获取输出参数之前,您必须关闭数据阅读器

    reader.Close();

然后你得到输出参数

    SScore = outScore.Value.Tostring();

如需更多帮助,请参阅此http://msdn.microsoft.com/en-us/library/ms971497

于 2014-09-11T12:15:58.673 回答
0

>试试这个它对多输出参数的工作正常:

     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();                        
            }
        }
于 2014-10-08T14:53:43.600 回答