我们如何从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"]));
答案 0 :(得分:3)
mb.Mem_DOB = reader["Mem_DOB"] == DBNull.Value
? (DateTime?) null
: (DateTime) reader["Mem_DOB"];
mb.Mem_DOB
应声明为DateTime?
请勿使用Convert.ToDateTime
。该值已经一个DateTime
,所以只需投出它。
答案 1 :(得分:2)
DateTime? Mem_DOB = null;
mb.Mem_DOB = reader["Mem_DOB"] == System.DBNull.Value ? null : Convert.ToDateTime(reader["Mem_DOB"]);
答案 2 :(得分:1)
mb.Mem_DOB = reader["Mem_DOB"] == System.DBNull.Value ? DateTime.MinValue : Convert.ToDateTime(reader["Mem_DOB"]);
答案 3 :(得分: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.TryParse或DateTime.TryParseExact。