更新gridview时如何防止异常?

时间:2012-10-16 06:30:45

标签: asp.net gridview

我有一个gridview,gridview中的内容数据是从存储过程调用的,但每当我想更新gridview行内容时,就会出现Exception。 更新代码如下:

protected void Grid_Updating(object sender, GridViewUpdateEventArgs e)
    {
        SqlCommand cmd = DataProvider.GenerateCommand("Update_HowzeEducation_SP", CommandType.StoredProcedure);
        cmd.Connection.Open();

        cmd.Parameters.Add("@FieldName", SqlDbType.NVarChar).Value = ((TextBox)GridView1.Rows[e.RowIndex].Cells[1].Controls[0]).Text;
        cmd.Parameters.Add("@DegreeId", SqlDbType.Int).Value = ((TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[0]).Text;
        cmd.Parameters.Add("@SchoolName", SqlDbType.NVarChar).Value = ((TextBox)GridView1.Rows[e.RowIndex].Cells[3].Controls[0]).Text;
        cmd.Parameters.Add("@StudyCityDescribtion", SqlDbType.NVarChar).Value = ((TextBox)GridView1.Rows[e.RowIndex].Cells[4].Controls[0]).Text;
        cmd.Parameters.Add("@Average", SqlDbType.Decimal).Value = decimal.Parse(((TextBox)GridView1.Rows[e.RowIndex].Cells[5].Controls[0]).Text, CultureInfo.InvariantCulture);
        cmd.Parameters.Add("@FinishLevelDate", SqlDbType.Date).Value = Convert.ToDateTime(((TextBox)GridView1.Rows[e.RowIndex].Cells[6].Controls[0]).Text.Trim());
        cmd.Parameters.Add("@ThesisTitle", SqlDbType.NVarChar).Value = ((TextBox)GridView1.Rows[e.RowIndex].Cells[7].Controls[0]).Text;
        cmd.Parameters.Add("@Describtion", SqlDbType.NVarChar).Value = ((TextBox)GridView1.Rows[e.RowIndex].Cells[8].Controls[0]).Text;
        cmd.Parameters.Add("@HowzeEducationId", SqlDbType.Int).Value = GlobalVariables.HowzeEducationId;

        cmd.ExecuteNonQuery();

    }

例外是: 无法将参数值从String转换为Int32。 此消息出现在代码的最后一行。

我会感谢任何有用的帮助。

1 个答案:

答案 0 :(得分:0)

错误说明了一切:您正在尝试将字符串放入int。

见这一行:

cmd.Parameters.Add("@DegreeId", SqlDbType.Int).Value = ((TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[0]).Text;

可以按照以下方式完成

cmd.Parameters.AddWithValue("@DegreeId",Convert.ToInt32(((TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[0]).Text);

如果您使用DataSourceID绑定了数据,那么NewValues集合就会派上用场

cmd.Parameters.AddWithValue("@DegreeId",e.NewValues["DegreeId"]);