2012-06-13 47 views
0

這是我在網格視圖中更新的係數。 當我執行它的編輯命令正常工作,但當我點擊更新這個錯誤彈出旁邊我的cmd.ExecuteNonQuery(); 「 」無法將參數值從字符串轉換爲十進制。「 請幫助我here.if有另一種方法,我可以添加到數據庫的詳細資料請告訴我 在此先感謝。 :)網格視圖更新錯誤

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
  • 不要在命名參數前加冒號(:)。 Oracle的.NET Framework數據提供程序自動提供冒號。分配給一個參數

    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

:此錯誤即將到來「字符串未被識別爲有效的日期時間」 – Huga

+0

如果您知道格式可以通過使用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