简体   繁体   English

SqlDataReader中的可空DateTime值

[英]Nullable DateTime values from SqlDataReader

How do we read integer null values from SqlDataReader ? 我们如何从SqlDataReader读取整数null值?

CREATE TABLE [dbo].[Mem_Basic] (
  [Id]          INT           IDENTITY (1, 1) NOT NULL,
  [Mem_Email]   VARCHAR (50)  NULL,
  [Mem_DOB]     DATE          NULL,
  [Mem_ResPin]  INT           NULL,
  PRIMARY KEY CLUSTERED ([Id] ASC)
);

For string and integer I use 对于字符串和整数,我使用

if (reader.Read() == true)
{
  mb.Mem_Email = reader["Mem_Email"] == System.DBNull.Value ? null : (string)reader["Mem_Email"];
  mb.Mem_ResPin = reader["Mem_ResPin"] as int? ?? default(int);
 }

But how do I read the date in same manner from reader? 但是,如何从阅读器中以相同方式读取日期?

//mb.Mem_DOB = (Convert.ToDateTime(reader["Mem_DOB"]));
mb.Mem_DOB = reader["Mem_DOB"] == DBNull.Value
                 ? (DateTime?) null
                 : (DateTime) reader["Mem_DOB"];

The mb.Mem_DOB should be declared as a DateTime? mb.Mem_DOB应该声明为DateTime?

Don't use Convert.ToDateTime . 不要使用Convert.ToDateTime The value is already a DateTime , so just cast it. 该值已经DateTime ,因此只需将其DateTime即可。

DateTime? Mem_DOB = null;

mb.Mem_DOB = reader["Mem_DOB"] == System.DBNull.Value ? null : Convert.ToDateTime(reader["Mem_DOB"]);
mb.Mem_DOB = reader["Mem_DOB"] == System.DBNull.Value ? DateTime.MinValue : Convert.ToDateTime(reader["Mem_DOB"]);

You can check if it is null or not. 您可以检查它是否为空。

int i = reader.GetOrdinal("Mem_DOB")
if( reader.IsDBNull(i))
   mb.Mem_DOB = someDefaultValueforyourdatetime; //assign null of Mem_DOB is nullable
else
   mb.Mem_DOB = Convert.ToDateTime(reader(i));

Though instead of using Convert.ToDateTime directly, i would recommend using DateTime.TryParse or DateTime.TryParseExact . 虽然我建议不要使用DateTime.TryParseDateTime.TryParseExact而不是直接使用Convert.ToDateTime。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM