0

グリッドビューがあり、グリッドビュー内のコンテンツデータはストアドプロシージャから呼び出されますが、グリッドビューの行コンテンツを更新するたびに例外が表示されます。更新コードは次のとおりです。

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();

    }

例外は次のとおりです。 パラメータ値を文字列からInt32に変換できませんでした。 このメッセージは、コードの最後の行に表示されます。

私はどんな有用な助けにも感謝します。

4

1 に答える 1

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"]);
于 2012-10-16T06:39:26.440 に答える