如何使用Datetime处理asp.net中的null值?

时间:2014-06-14 23:23:49

标签: c# asp.net datetime datetime-format

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

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字段中输入值时,它工作正常,数据保存在数据库中..但是当我把它留空时,我得到一个错误“字符串未被识别为有效的DateTime”。数据库中表中的ContractDate字段为“Allow null”。如何通过此代码处理此null值作为ContractDate字段在表单上不是必需的?

1 个答案:

答案 0 :(得分:0)

System.DateTime是一个不可为空的结构。我建议您在尝试使用String.IsNullOrEmpty(txtContractDate.Text)之前使用Convert.ToDateTime,以便了解是否传入空字符串,并将参数DateTime ContractDate更改为DateTime? ContractDate,这样您就可以传入null。请参阅MSDN Nullable

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.Value创建SqlParameter时,需要处理contractDate的null情况:

if (ContractDate != null)
    sqlprm[1].Value = ContractDate.Value;
else
    sqlprm[1].Value = DBNull.Value;