我用C#和oracle 11g开发了ASP.net页面。我正在从GridView更新数据库表。但每当我尝试使日期单元格无效时会出现此错误
“字符串未被识别为有效的DateTime。” 扫描存储在数据库(oracle 11g)中的日期数据,包括日期和时间。 (即05-07-2015 PM 05:21:15)
请参考以下代码: -
protected void grv_pallet_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
TextBox txt_reswt = (TextBox)grv_pallet.Rows[e.RowIndex].FindControl("txt_reswt");
TextBox txt_rackno = (TextBox)grv_pallet.Rows[e.RowIndex].FindControl("txt_rackno");
TextBox txt_whcd = (TextBox)grv_pallet.Rows[e.RowIndex].FindControl("txt_whcd");
TextBox txt_dtsts = (TextBox)grv_pallet.Rows[e.RowIndex].FindControl("txt_dtsts");
TextBox txt_scandt = (TextBox)grv_pallet.Rows[e.RowIndex].FindControl("txt_scandt");
string str1 = "UPDATE WI_PALLET SET RES_WT = :reswt, RACK_NO = :rackno, WH_CD = :whcd, DATA_STS = :datasts, SCAN_DT = :scandt WHERE PALLET_NO = '" + grv_pallet.DataKeys[e.RowIndex].Values[0].ToString() + "'";
con.Open();
OracleCommand cmd = new OracleCommand(str1, con);
cmd.Parameters.AddWithValue("reswt", txt_reswt.Text);
cmd.Parameters.AddWithValue("rackno", txt_rackno.Text);
cmd.Parameters.AddWithValue("whcd", txt_whcd.Text);
cmd.Parameters.AddWithValue("datasts", txt_dtsts.Text);
cmd.Parameters.AddWithValue("scandt", Convert.ToDatetime(txt_scandt.Text));
cmd.ExecuteNonQuery();
grv_pallet.EditIndex = -1;
con.Close();
string display = "Database Updated Successfully..!!";
ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + display + "');", true);
}
答案 0 :(得分:0)
cmd.Parameters.AddWithValue("scandt", Convert.ToDateTime(txt_scandt.Text));
您可以使用以下代码:
cmd.Parameters.AddWithValue("scandt",
string.IsNullOrEmpty(txt_scandt.Text) ? DBNull.Value : Convert.ToDateTime(txt_scandt.Text));
<强>更新强>
使用可空类型
cmd.Parameters.AddWithValue("scandt",
string.IsNullOrEmpty(txt_scandt.Text) ? (DateTime?)DBNull.Value : Convert.ToDateTime(txt_scandt.Text));
答案 1 :(得分:0)
我已按以下方式更改了我的代码: -
if (string.IsNullOrEmpty(txt_scandt.Text))
{
cmd.Parameters.AddWithValue("scandt", DBNull.Value);
}
else
{
cmd.Parameters.AddWithValue("scandt", Convert.ToDateTime(txt_scandt.Text));
}
现在它正在工作。