2012-06-13 2 views
0

Это коэффициент для моего обновления в виде сетки. , когда я его выполняю, команда редактирования работает правильно, но когда я нажимаю обновление, эта ошибка появляется рядом с моим cmd.ExecuteNonQuery(); «Не удалось преобразовать значение параметра из строки в десятичную.» , пожалуйста, помогите мне здесь. Если у меня есть другой способ добавить данные в базу данных plz, скажите мне заранее. :)Ошибка просмотра сетки сетки

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

ответ

0
  • Не следует перед именованным параметром двоеточие (:). Поставщик данных .NET Framework для 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(); 
        } 
    
    } 
    
+0

: теперь эта ошибка наступает «Строка не была признана действительной DateTime» – Huga

+0

Какое значение вы получаете как поле даты, если вы знаете формат, который вы можете преобразовать в datetime, используя 'DateTime.ParseExact (dateTo," mm/dd/yyyy ", CultureInfo.InvariantCulture);' – Damith

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

Перед преобразованием проверьте, строковые значения не являются пустыми, если один пуст затем назначьте значение десятичного/десятичного значения по умолчанию.

+0

Хм позже для 'DateTime' также:) – V4Vendetta

+0

@ V4Vendetta: теперь его отображение Входная строка не была в правильном формате в lin e "cmd.Parameters.Add (": srno ", OracleType.Number, 8) .Value = Convert.ToDecimal (GridView1.Rows [e.RowIndex] .Cells [2] .Text);" – Huga

+0

@Huga какой текст вы получаете из GridView1.Rows [e.RowIndex] .Cells [2] .Text? – Coder

Смежные вопросы