这是我保存学生记录的代码,
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字段在表单上不是必需的?
答案 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;