Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.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# 确定日期字段是否包含空值_C#_Sql Server - Fatal编程技术网

C# 确定日期字段是否包含空值

C# 确定日期字段是否包含空值,c#,sql-server,C#,Sql Server,我有一个代码隐藏形式的小代码块: using (SqlConnection connection1 = new SqlConnection(str)) { using (SqlCommand cmd = new SqlCommand("usp_select_claim_id_MERGE", connection1)) { cmd.CommandType = CommandType.StoredProcedure; connection1.Open

我有一个代码隐藏形式的小代码块:

using (SqlConnection connection1 = new SqlConnection(str))
{
    using (SqlCommand cmd = new SqlCommand("usp_select_claim_id_MERGE", connection1))
    {
        cmd.CommandType = CommandType.StoredProcedure;

        connection1.Open();
        {
            using (SqlDataReader DT = cmd.ExecuteReader())
            {

            //Format the Orig Open Date to strip off the time and just leave the date
            if ((DT["Orig_Open_Date"]) == null)
              {
                OrigOpenDt = Convert.ToDateTime("1/1/1900");
                OrigOpenDt2 = "";
              }
              else
              {
                OrigOpenDt = Convert.ToDateTime(DT["Orig_Open_Date"]);
                OrigOpenDt2 = OrigOpenDt.ToString("MM/dd/yyyy");
              }
当它点击IF语句时,它告诉我它是false,因此代码跳转到“else”语句。但是,当我查看SQL Server表中有问题的记录时,它看起来是这样的(实际上我只是查看下图中的第一条记录):

在我看来,Orig_Open_Date(一直到右边的列)中有空值

如果我抓取一个记录,其中在Orig_Open_date中实际上有一个日期,那么它工作正常。如果没有日期,它仍然尝试运行“else”语句,因此我的“If”语句肯定是错误的

诚然,我是一名C#n00b。我做错了什么?

试试DBNull.Value

if(value == DBNull.Value)
请尝试使用DBNull.Value

if(value == DBNull.Value)

您也可以在SQL语句中执行此操作:

Select ISNULL(Orig_Open_Date,'1/1/1900') as Orig_Open_Date

您也可以在SQL语句中执行此操作:

Select ISNULL(Orig_Open_Date,'1/1/1900') as Orig_Open_Date

您收到空值的原因是读取器从DB重新运行的空值。我经常遇到这个问题,现在我总是检查DBNull.value

例如:

db.GetCommand().CommandText = "SELECT * FROM EMPLOYE";
IDataReader reader = db.GetCommand().ExecuteReader();

if(reader.Read())
{
if(reader["HierdDate"] == DBNull.Value)
// Do that
else
//Do this
}

检查DataReader可以返回的DBNull值总是一件好事。

之所以收到空值,是因为读取器从DB重新运行的null值。我经常遇到这个问题,现在我总是检查DBNull.value

例如:

db.GetCommand().CommandText = "SELECT * FROM EMPLOYE";
IDataReader reader = db.GetCommand().ExecuteReader();

if(reader.Read())
{
if(reader["HierdDate"] == DBNull.Value)
// Do that
else
//Do this
}

检查DataReader可以返回的DBNull值总是一件好事。

当出现这种情况时,调试它并查看值。然后你就会知道该怎么做。所以我先试试看(DT[“Orig_Open_Date”])的值是多少。在即时窗口中,我输入了?DT[“Orig_Open_Date”],它会吐出“{}”(不带引号)。我不知道该怎么办。当你遇到这种情况时,调试它,看看它的价值。然后你就会知道该怎么做。所以我先试试看(DT[“Orig_Open_Date”])的值是多少。在即时窗口中,我输入了?DT[“Orig_Open_Date”],它会吐出“{}”(不带引号)。我不知道该怎么办,这很有效。我要给你支票,因为你是第一个进入大门的。谢谢这起作用了。我要给你支票,因为你是第一个进入大门的。谢谢