如何在我们的程序中处理允许为空的日期时间字段 (DB​​) 的 null?

发布于 2024-08-03 11:27:08 字数 53 浏览 2 评论 0原文

我们如何在 C# 程序中处理日期时间字段(从 SQL Server 获取)的 null 值?

How could we handle null for a datetime field (got from SQL Server) in our program in c#?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

会发光的星星闪亮亮i 2024-08-10 11:27:08

这里有 3 种常见的方法;

  • 如果您正在谈论 object(也许当您从数据读取器中获取它时),那么 DBNull.Value 可以表示 null。我不倾向于将其排除在数据层之外,尽管
  • 由于 .NET 1.1 的历史,DateTime.MinValue 通常被解释为 null;也许是一个神奇的数字 - 但它可以工作,并且受到 .NET 2.0 中大多数数据绑定等的支持
  • Nullable 意味着您可以使用 DateTime? - 即可空的日期时间;只需使用 DateTime? 即可,只要您指的是可以为 null 的 DateTime,并且您可以为其指定值 null 或有效的 <代码>日期时间。

关于数据访问和 null 的其他一些想法:

  • 当传递给 SqlCommand 时,您必须使用 DBNull.Value,而不是 null - 请参阅下文,
  • 当从数据读取器读取数据时,我倾向于检查 reader.IsDbNull(ordinal)

命令内容(以 Nullable 为例):

param.Value = when.HasValue ? (object)when.Value : DBNull.Value;

There are 3 common approaches here;

  • if you are talking about object (perhaps as you fetch it from a data-reader), then DBNull.Value can represent null. I don't tend to let this out of the data-layer, though
  • due to .NET 1.1 history, DateTime.MinValue is commonly interpreted as null; a magic number, maybe - but it works and is supported by most data-binding etc
  • in .NET 2.0, Nullable<T> means you can use DateTime? - i.e. a nullable-of-DateTime; just use DateTime? where-ever you mean a DateTime that can be null, and you can give it a value of null or a valid DateTime.

Some other thoughts on data-access and nulls:

  • when passing to a SqlCommand you must use DBNull.Value, not null - see below
  • when reading from a data-reader, I tend to check reader.IsDbNull(ordinal)

command stuff (with Nullable<T> as the example):

param.Value = when.HasValue ? (object)when.Value : DBNull.Value;
情感失落者 2024-08-10 11:27:08

使用 DateTime?

您具体遇到了什么问题?

-- 编辑

清楚一点,这是一个 Nullable DateTime 对象,而不是问题:)

DateTime? t = null;

-- 编辑

响应评论,检查如下:

DateTime? theTime;

if( table["TheColumn"] == DBNull.Value ){
    theTime = null;
} else {
    theTime = (DateTime) table["TheColumn"];
}

Use DateTime?

What problem are you having, specifically?

-- Edit

Just so it's clear, that's a Nullable DateTime object, not a question :)

DateTime? t = null;

-- Edit

Responding to comment, check it like so:

DateTime? theTime;

if( table["TheColumn"] == DBNull.Value ){
    theTime = null;
} else {
    theTime = (DateTime) table["TheColumn"];
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文