C# 无法使用字典为日期插入null

C# 无法使用字典为日期插入null,c#,C#,我试图使用C#和SQL插入记录,但当date列为空时出现此错误,我搜索了类似的案例,但尚未解决。它插入1900年1月1日,表中的列是Datetime任意idea或类似案例链接 [HttpPost] public HttpResponseMessage save (Education edu) { Dictionary<string, object> xmt = new Dictionary<string, object>(); xmt.Add("@Sta

我试图使用C#和SQL插入记录,但当date列为空时出现此错误,我搜索了类似的案例,但尚未解决。它插入1900年1月1日,表中的列是Datetime任意idea或类似案例链接

[HttpPost]
public HttpResponseMessage save (Education edu)
{
    Dictionary<string, object> xmt = new Dictionary<string, object>();

    xmt.Add("@Staff_Key", edu.Staff_Key);
    xmt.Add("@Type_Education", edu.Type_Education);
    xmt.Add("@Qual", edu.Qual);
    xmt.Add("@Uni", edu.Uni);
    xmt.Add("@Date_Issue", edu.Date_Issue.ToString() == null ? "Null" : edu.Date_Issue.ToString());
    xmt.Add("@Notes", edu.Notes);

    obj.ExecNonQuery(
       @"insert into HR_DocEducation (Staff_Key,Type_Education,Qual,Uni,Date_Issue,Notes)
       values (@Staff_Key,@Type_Education,@Qual,@Uni,@Date_Issue,@Notes) ",xmt);

    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created);
    return response;
[HttpPost]
公共HttpResponseMessage save(教育教育教育)
{
Dictionary xmt=新字典();
xmt.Add(“@Staff\u Key”,edu.Staff\u Key);
xmt.Add(“@Type_Education”,教育类型_Education);
xmt.Add(“@Qual”,教育质量);
xmt.Add(“@Uni”,edu.Uni);
xmt.Add(“@Date\u Issue”,edu.Date\u Issue.ToString()==null?”null:edu.Date\u Issue.ToString());
xmt.Add(“@Notes”,教育注释);
obj.execonquery(
@“插入人力资源文档教育(员工密钥、类型教育、资格、统一、发布日期、注释)
值(@Staff\u Key、@Type\u Education、@Qual、@Uni、@Date\u Issue、@Notes)”,xmt);
HttpResponseMessage response=Request.CreateResponse(HttpStatusCode.Created);
返回响应;

正如Astha Srivastava所说,您可以找到
DateTime
对空值行为的简短描述

一种可能的方法是使用属性
DBNull.Value
,该属性引用数据库上使用的值。我建议在使用SQL命令时使用该属性

在简短的查找之后,我发现了您的一个类似问题,以
DBNull.Value
为例。查找一下,看它是否有助于您对答案进行投票

哈桑, 我也遇到了同样的问题,除了使用可为空的DateTime
DateTime?
对象外,还有一个技巧就是如下所示更正三元运算符:

xmt.Add("@Date_Issue", edu.Date_Issue == null ? (object) DBNull.Value : (object)edu.Date_Issue);
而不是

xmt.Add("@Date_Issue", edu.Date_Issue.ToString() == null ? "Null" : edu.Date_Issue.ToString());

是的,它在类codeDateTime中可为Null。DateTime不是可为Null的类型。如果不提供值,它等于DateTime.MinValue,这就是它采用01/01/1900并插入表中的原因。请注意,检查
ToString()的结果
call is
null
几乎永远不会起作用。但如果不知道更多细节,就很难提供帮助-教育日期问题的类型是什么?老实说,我认为转换为字符串可能是个坏主意。(我们甚至不知道日期问题的类型,这也没用。)我知道
Date\u Issue
是问题中的字符串,基于他试图用字符串值分配它的方式,
xmt.Add(“@Date\u Issue”,edu.Date\u Issue.ToString()==null?”null“:edu.Date\u Issue.ToString())
从不将
edu.Date\u Issue
视为字符串。条件运算符的第二个和第三个操作数都是字符串,因为第三个操作数涉及另一个
ToString()
调用。如果您认为
Date\u Issue
的类型是
string
,为什么要包括
ToString()
在任何地方调用?但是如果它是不同类型的,那么是的,你是正确的,没有必要转换为字符串,我已经编辑了我的答案,使其更通用。正确,我以为你说的是字典成员
日期问题
而不是
教育日期问题
。我相应地编辑了我的答案。T汉克斯。