这是我保存学生记录的代码,
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'。
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>