简体   繁体   English

将存储过程的结果(OUTPUT)存储到Gridview C#ASP.Net

[英]Storing a Result (OUTPUT) from a stored procedure into a Gridview c# ASP.Net

I am trying to return the Average value that is generated by a stored procedure into a new column in the Gridview 我试图将存储过程生成的平均值返回到Gridview中的新列中

What should I put instead of the "!!!!" 我应该用什么代替“ !!!!” in my code below 在下面的代码中

I keep getting "Stored procedure expects parameter which was not supplied" Error although I defined that parameter as OUTPUT in the procedure (BELOW) 我不断收到“存储过程期望未提供的参数”的错误,尽管我在过程中将该参数定义为OUTPUT(以下)

   protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
    GridView1.Columns[3].Visible = true;
    string Teachername = GridView1.SelectedRow.Cells[1].Text;

    string connStr = ConfigurationManager.ConnectionStrings["MS4ConnectionString"].ToString();
    SqlConnection conn = new SqlConnection(connStr);

    SqlCommand cmd = new SqlCommand("Overall_Rating", conn);
    cmd.CommandType = CommandType.StoredProcedure;

    SqlParameter Parent_Username = new SqlParameter("@parent_username", TextBox1.Text);
    SqlParameter Teacher_Username = new SqlParameter("@teacher_username", Teachername);
    SqlParameter Avg = new SqlParameter("@Avg", !!!!);
    Avg.Direction = ParameterDirection.ReturnValue;

    cmd.Parameters.Add(Parent_Username);
    cmd.Parameters.Add(Teacher_Username);
    cmd.Parameters.Add(Avg);

    string retunvalue = (string)cmd.Parameters["@Avg"].Value;
    System.Diagnostics.Debug.WriteLine(retunvalue);

    conn.Open();
    cmd.ExecuteNonQuery();
}

@parent_username varchar(40), @teacher_username varchar(40), @Avg smallint output AS SET @Avg = ( select Avg(PRT.rating) FROM Parents_Rate_Teachers PRT INNER JOIN Employees_Name E ON PRT.teacher_username = E.employee_username WHERE E.employee_username= @teacher_username ) return @Avg @parent_username varchar(40),@ teacher_username varchar(40),@ Avg smallint输出AS SET @Avg =(select Avg(PRT.rating)FROM Parents_Rate_Teachers PRT INNER JOIN Employees_Name E ON PRT.teacher_username = E.employee_username WHERE E.employee_username = @teacher_username)返回@Avg

I think you just want ParameterDirection.Output instead of ReturnValue: 我认为您只需要ParameterDirection.Output而不是ReturnValue:

SqlParameter avg= new SqlParameter();
avg.ParameterName = "@Avg";
avg.Direction = ParameterDirection.Output;
cmd.Parameters.Add(avg);

There are also problem in row (in addition to previous answer) 行中也有问题(除了以前的答案)

string retunvalue = (string)cmd.Parameters["@Avg"].Value;

you should return int, because @Avg is smallint (smallint = Int16): 您应该返回int,因为@Avg是smallint(smallint = Int16):

int retunvalue = (int)cmd.Parameters["@Avg"].Value;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM