日期字段未从GridView获取null

时间:2015-08-24 09:34:15

标签: c# asp.net gridview oracle11g

我用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);
}

2 个答案:

答案 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));
    }

现在它正在工作。