如何在asp.net中使用Datetime处理空值



这是我保存学生记录的代码,

int x = clsFunctions.InsertStudent(txtStudent.Text,Convert.ToDateTime(txtContractDate.Text))

函数定义为

public static int InsertStudent(string Name, DateTime ContractDate)
{
int isaved = 0;
SqlParameter[] sqlprm = new SqlParameter[2];
sqlprm[0] = new SqlParameter("@Name", SqlDbType.VarChar, 100);
sqlprm[0].Value = Name;
sqlprm[1] = new SqlParameter("@ContractDate", SqlDbType.Date);
sqlprm[1].Value = ContractDate;
isaved = db.ExecuteNonQueryProcedure("ProcedureName", sqlprm);
return isaved;
}

db。ExecuteNonQueryProcedure是调用ExecuteNonQuery()的函数…

我的问题是,当我在ContractDate字段输入值时,它工作正常,数据保存在数据库中。但是当我留下它为空时,我得到了一个错误"字符串未被识别为有效的日期时间"。数据库中表中的ContractDate字段是'Allow null'。

如果ContractDate字段在表单上不是必需的,如何通过这段代码处理这个空值?

System.DateTime是一个不可空的结构体。我建议你在尝试使用Convert.ToDateTime之前使用String.IsNullOrEmpty(txtContractDate.Text),这样你就可以知道是否传递了一个空白字符串,并将参数DateTime ContractDate更改为DateTime? ContractDate,这允许你传递null。

DateTime? contractDate = null; 
if (!String.IsNullOrEmpty(txtContractDate.Text))
    contractDate = Convert.ToDateTime(txtContractDate.Text);
int x = InsertStudent(txtStudent.Text, contractDate);
编辑:我在??上犯了一个小错误。,操作符期望两边的类型相同。您将需要使用更详细的代码。我已经在SQL Server Express 2014 LocalDB上成功运行了一个测试,使用类似于下面的代码。

最后,当您使用DBNull创建SqlParameter时,您需要处理contractDate为空的情况。值:

if (ContractDate != null)
    sqlprm[1].Value = ContractDate.Value;
else
    sqlprm[1].Value = DBNull.Value;
<asp:TextBox ID="TextBox1" TextMode="Date" Text='<%# Eval("ColumnName").ToString() == "" ? Eval("ColumnName") : Convert.ToDateTime(Eval("ColumnName").ToString()).ToString("yyyy-MM-dd") %>' runat="server" CssClass="form-control"></asp:TextBox>

最新更新