【问题标题】:SQL Server Update DateTime type to nullSQL Server 将 DateTime 类型更新为 null
【发布时间】:2015-08-31 23:00:19
【问题描述】:

既然是星期五,我的大脑肯定出了问题。

我正在尝试使用良好的 ol'OleDb 更新 DateTime 类型的列,更新始终运行(更改同一行上的其他列值)但由于某种原因 DateTime 列拒绝设置为 null。

Ofc 列允许为空。

我正在使用 OleDbParameter 构造函数向我的命令添加一个新参数,如果值为 null,它可能是拒绝运行的参数吗?

我尝试使用 SqlDateTime.Null、DbNull.Value 和 null 作为参数,但没有将值设置为 null,它保持不变或将其设置为我们心爱的 1900-00-01。

感谢任何提示和技巧

【问题讨论】:

  • 列是否允许NULLs?
  • 发布您的代码。 DateTime 除非你使用 DateTime? 不能是 null。 当然如果你的变量不能是 DateTime? 出于某种原因,将其设置为无效值(即 1909 ),如果将其设置为该年份,则手动将其设置为 NULL
  • 你能显示实际的更新命令吗?您是否有一些保护where 子句,或者其他将与参数进行比较的东西(并且由于null=/=null 而失败)
  • Ramhound “如果将其设置为那一年手动将其设置为 NULL”,这正是我正在寻找的,但我该怎么做呢?数据库似乎吞噬了我的 DbNull 和我迄今为止发现的所有空值。 @Damien_The_Unbeliever 这是一个常规的“UPDATE tableX SET UserName = ? WHERE User_Id = 1” 没什么特别的,我稍后会尝试更多地使用方法,整个更新运行并完美运行,只是它不会触及我的日期时间列。无论如何感谢您的回复
  • 如果我是你,无论如何我都会尝试发布代码。如果它特别聪明,您现在可能已经自己解决了。可能正是因为它是您认为“常规”的那种代码,您看不到它哪里出了问题。

标签: c# .net sql sql-server dbnull


【解决方案1】:

你想使用 DBNull.Value

就像之前的 cmets 一样,您可以执行 DateTime? myDate = null; 之类的操作

【讨论】:

    【解决方案2】:

    问题在于,除非您采取特定操作,否则 DateTime 将表示为 DateTime.MinValue。因此,如果您希望 DB 中有 null,则需要测试该值,如果是 MinValue,则发送 DBNull。

    我们实际上使用一种方法来获取日期时间的值,如果日期是最小值,则为 null:

    function object DateToDB(DateTime testDate) 
    {
        if (testDate == DateTime.MinValue)
        {
            return DBNull.Value;
        } else 
        {
            return testDate;
        }
    }
    

    然后使用此方法分配参数值。

    【讨论】:

    • 对不起,如果我来这里很苛刻,但这与 OleDbCommand 有什么关系?我已经在尝试将参数值设置为 null,但它不会将数据库值更新为 null,它在执行插入时工作得非常好。
    • @ThomasLindvall:抱歉,我应该更清楚一点:这是您用来设置 OleDbCommand 参数值的代码。您想在参数中发送 DBNull.Value 而不是 null。此方法允许您在一个位置执行此逻辑。
    猜你喜欢
    • 1970-01-01
    • 2020-07-31
    • 2020-02-02
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    相关资源
    最近更新 更多