Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SqlDataReader中的可空DateTime值_C#_Sql_Sql Server - Fatal编程技术网

C# SqlDataReader中的可空DateTime值

C# SqlDataReader中的可空DateTime值,c#,sql,sql-server,C#,Sql,Sql Server,如何从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]

如何从
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"]));

您可以检查它是否为空

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,但我建议使用or。

您可以检查它是否为null

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,但我建议使用或

mb.Mem\u DOB
应声明为
DateTime?

不要使用
Convert.ToDateTime
。该值已经是一个
日期时间
,因此只需将其强制转换即可

mb.Mem\u DOB
应声明为
DateTime?



不要使用
Convert.ToDateTime
。该值已经是一个
DateTime
,所以只需将其强制转换。

SQLDateTime
用于1753年,而不是DateTime.min值作为1753年之前的日期的1/1/0001将无法重新插入SQL。我认为
Mem\u DOB
是DateTime,而不是
DateTime?
。在这种情况下,我们应该以这种方式读取它,如果
Mem_DOB==DataTime.MinValue
SQLDateTime对于1753,而不是DateTime.MinValue作为1753年之前的日期1/1/0001重新插入到SQL中,则写入数据库
Null
。我认为
Mem_DOB
是DateTime,而不是
DateTime?
。在这种情况下,我们应该以这种方式读取它,如果
Mem_DOB==DataTime.MinValue
我无法从数据库读取日期值,因为存在已知值(Null值)。如果有空,我希望返回空值如果它是数据库中可空的日期时间,它应该是数据访问层中可空的日期时间(
DateTime?
)。我无法从数据库中读取日期值,因为存在已知值(空值)。如果有null,我希望返回null值如果它是数据库中可为null的DateTime,则它应该是可为null的DateTime(
DateTime?
)在数据访问层。只有当
Mem\u-DOB
是类的可空
DateTime?
字段时,这才有效。只有当
Mem\u-DOB
是类的可空
DateTime?
字段时,这才有效。这是编译还是需要
(DateTime?)null
?@parvathiiii-Mem_DOB的类型是什么?Mem_DOB是类
mb
的可为null的DateTime成员,也是数据库表中列的名称。
public DateTime?Mem_DOB{get;set;}
-nullable,带问号:)@parvathiiii不能保存空值。可以注意结尾的问号。但改变这一点意味着,无论在哪里使用它,都需要检查并使用。这是编译还是需要
(DateTime?)null
?@parvathiiii-Mem_DOB的类型是什么?Mem_DOB是类
mb
的可为null的DateTime成员,也是数据库表中列的名称。
public DateTime?Mem_DOB{get;set;}
-nullable,带问号:)@parvathiiii不能保存空值。可以注意结尾的问号。但改变这一点意味着,无论您在哪里使用它,都需要检查并使用。@Matt显示错误-和系统之间没有不必要的转换。DateTime@Parvathiiiii-我的错。谢谢。成功了@Matt显示错误-和系统之间没有重要的转换。DateTime@Parvathiiiii-我的错。谢谢。工作!!
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));
mb.Mem_DOB = reader["Mem_DOB"] == DBNull.Value
                 ? (DateTime?) null
                 : (DateTime) reader["Mem_DOB"];