0

我正在尝试使用 linq 在 sqlserver 中插入一个 DateTime 值。csharp 端的 DateTime 值可能为空。sqlserver 中对应的字段是可以为空的日期时间字段。以下是我的代码:

using (var dataContext = GetDataContext())
{
    DateTime dateTime;
    var combinedWorkBasket = new CombinedWorkBasket()
    {

        FirstName = combinedWorkbasketData.FirstName,
        LastName = combinedWorkbasketData.LastName,
        Address1 = combinedWorkbasketData.Address1,
        RetirementDate = Convert.ToDateTime(combinedWorkbasketData.RetirementDate),

    };
    dataContext.CombinedWorkBaskets.InsertOnSubmit(combinedWorkBasket);
    dataContext.SubmitChanges();
}

当 combineWorkbasketData.RetirementDate 碰巧为 null 时,它是一个字符串值,可以是有效日期或 null,然后 sqlserver 会抛出错误,指出日期应该在范围内。当 combineWorkbasketData.RetirementDate 恰好为空时,Convert.ToDateTime(combinedWorkbasketData.RetirementDate) 转换为一些无效数据值。我尝试了以下,仍然是同样的问题。

RetirementDate = DateTime.TryParse(combinedWorkbasketData.RetirementDate, out temp) ? Convert.ToDateTime(combinedWorkbasketData.RetirementDate) : Convert.ToDateTime(null)

我只想完成以下操作:当 combineWorkbasketData.RetirementDate 是有效日期时插入 RetirementDate,否则不要插入它,而是插入其他值,例如 Firstname 等

谢谢

4

3 回答 3

1

问题是 datetime 不保存空值,但它保存最小时间,即类似这样的东西。'1/1/0001 12:00:00 AM'。而不是直接传递日期时间尝试使用

DateTime.MinValue== Convert.ToDateTime(combinedWorkbasketData.RetirementDate)?Null:Convert.ToDateTime(combinedWorkbasketData.RetirementDate)

我还没有测试代码使用它作为参考你可能需要一些改进。

于 2012-08-28T06:58:45.607 回答
1

您可能希望使用可为空的数据类型,但这仅在您的数据库允许 RetirementDate 列中的空值时才有帮助。此外,您还必须使 CombinedWorkBasket 类中的 RetirementDate 字段为空。

using (var dataContext = GetDataContext())
{
    DateTime? dateTime;
    var combinedWorkBasket = new CombinedWorkBasket()
    {

        FirstName = combinedWorkbasketData.FirstName,
        LastName = combinedWorkbasketData.LastName,
        Address1 = combinedWorkbasketData.Address1,
        RetirementDate = combinedWorkbasketData.RetirementDate != null ?
            Convert.ToDateTime(combinedWorkbasketData.RetirementDate) : null;

    };
    dataContext.CombinedWorkBaskets.InsertOnSubmit(combinedWorkBasket);
    dataContext.SubmitChanges();
}
于 2012-08-28T06:56:15.927 回答
0

我认为 RetirementDate 必须是可空类型,实体框架才能插入 DBNull。

所以让它像

public class CombinedWorkBasket
{
    // other fields
    public DateTime? RetirementDate { get; set; }
}

然后尝试根据逻辑将 Null 分配为数据库中的关联列作为“允许 Null”。

希望它会插入null。

于 2012-08-28T06:57:46.010 回答