gridview更新错误

时间:2012-06-13 08:55:27

标签: c# asp.net .net visual-studio-2010 oracle11g

这是我在网格视图中更新的系数。 当我执行它时,编辑命令正常工作但当我点击更新时,我的cmd.ExecuteNonQuery()旁边会弹出此错误; “无法将参数值从String转换为Decimal。” 请帮帮我。如果我有另一种方式将细节添加到数据库中,请告诉我 提前致谢。 :)

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    string v =   System.Configuration.ConfigurationManager.ConnectionStrings["harish"].ConnectionString;
    con = new OracleConnection(v);
    con.Open();


    string query = "update leave_module1 set name=:name,desig=:desig,srno=:srno,tol=:tol,compdates=:compdates,fd=:fd,td=:td,noofdays=:nod,remarks=:remarks";
    OracleCommand cmd = new OracleCommand(query, con);
        cmd.Parameters.Add(":name", OracleType.VarChar, 50).Value = GridView1.Rows[e.RowIndex].Cells[0].Text;
        cmd.Parameters.Add(":desig", OracleType.VarChar, 30).Value = GridView1.Rows[e.RowIndex].Cells[1].Text;
        cmd.Parameters.Add(":srno", OracleType.Number, 8).Value = GridView1.Rows[e.RowIndex].Cells[2].Text;
        cmd.Parameters.Add(":tol", OracleType.VarChar, 10).Value = GridView1.Rows[e.RowIndex].Cells[3].Text;
        cmd.Parameters.Add(":compdates", OracleType.VarChar, 30).Value = GridView1.Rows[e.RowIndex].Cells[4].Text;
        cmd.Parameters.Add(":fd", OracleType.DateTime).Value = GridView1.Rows[e.RowIndex].Cells[5].Text;
        cmd.Parameters.Add(":td", OracleType.DateTime).Value = GridView1.Rows[e.RowIndex].Cells[6].Text;
        cmd.Parameters.Add(":nod", OracleType.Number, 3).Value = GridView1.Rows[e.RowIndex].Cells[7].Text;
        cmd.Parameters.Add(":remarks", OracleType.VarChar, 50).Value = GridView1.Rows[e.RowIndex].Cells[8].Text;

        cmd.ExecuteNonQuery();
        ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('The Data has been added');window.location='Default2.aspx';</script>;");


        cmd.Dispose();
        con.Close();    
}

2 个答案:

答案 0 :(得分:0)

将字符串转换为十进制:

    cmd.Parameters.Add(":srno", OracleType.Number, 8).Value = Convert.ToDecimal(GridView1.Rows[e.RowIndex].Cells[2].Text);
    cmd.Parameters.Add(":nod", OracleType.Number, 3).Value = Convert.ToDecimal(GridView1.Rows[e.RowIndex].Cells[7].Text);

将字符串转换为日期时间:

    cmd.Parameters.Add(":fd", OracleType.DateTime).Value = DateTime.Parse(GridView1.Rows[e.RowIndex].Cells[5].Text);
    cmd.Parameters.Add(":td", OracleType.DateTime).Value = DateTime.Parse(GridView1.Rows[e.RowIndex].Cells[6].Text);

在转换之前,检查字符串值是否为空,如果任何一个为空,则指定默认的十进制/日期时间值。

答案 1 :(得分:0)

  • 不要在命名参数前面加冒号(:)。 .NET Framework数据提供程序for Oracle自动提供冒号。
  • 在分配参数

    之前将参数转换为相关类型
    cmd.Parameters.Add("name", OracleType.VarChar, 50).Value = GridView1.Rows[e.RowIndex].Cells[0].Text; // this is ok 
    cmd.Parameters.Add("fd", OracleType.DateTime).Value = Convert.ToDateTime(GridView1.Rows[e.RowIndex].Cells[5].Text);
    cmd.Parameters.Add("nod", OracleType.Number, 3).Value = Convert.ToDecimal(GridView1.Rows[e.RowIndex].Cells[7].Text);
    
  • 使用Using block

    这是示例代码

    using (var connection = new OracleConnection(connectionString))
    {
        connection.Open();
        using (var command = new OracleCommand(queryString, connection))
        {
           // add parameters here 
           command.ExecuteNonQuery();
        }
    
     }