1

我们如何从中读取整数空值SqlDataReader

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)
);

对于我使用的字符串和整数

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);
 }

但是我如何以同样的方式从读者那里读取日期?

//mb.Mem_DOB = (Convert.ToDateTime(reader["Mem_DOB"]));
4

4 回答 4

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

mb.Mem_DOB应该声明为DateTime?

不要使用Convert.ToDateTime. 该值已经是 a DateTime,所以只需转换它。

于 2013-09-02T05:05:48.357 回答
2
DateTime? Mem_DOB = null;

mb.Mem_DOB = reader["Mem_DOB"] == System.DBNull.Value ? null : Convert.ToDateTime(reader["Mem_DOB"]);
于 2013-09-02T04:53:38.620 回答
1
mb.Mem_DOB = reader["Mem_DOB"] == System.DBNull.Value ? DateTime.MinValue : Convert.ToDateTime(reader["Mem_DOB"]);
于 2013-09-02T04:51:34.513 回答
0

您可以检查它是否为空。

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));

虽然我建议不要直接使用 Convert.ToDateTime ,而是使用DateTime.TryParseDateTime.TryParseExact

于 2013-09-02T04:54:48.593 回答