如何使用c#检查数据表行中的每个值

时间:2011-10-28 09:46:23

标签: c# .net winforms datatable datarow

我有两个名为visitsmembers的表,我使用以下查询获取数据。

 string sql=  @"SELECT member_Firstname, member_Lastname, member_Postcode,  
          visit_DateTime, visit_Status, visit_Logout_DateTime, visits.member_Id, visit_AlertMsg
          FROM members, visits
          WHERE members.member_Id = visits.member_Id
          AND members.member_Active LIKE 'y%'";

在这里我通过使用与组合框值的一些比较得到visit_DateTime值

    datatable dt = helper.getdata(sql)
     foreach (DataRow row in dt.Rows)
     {
         if (row["visit_Logout_DateTime"] != null)
         {
          DateTime dtlogout = DateTime.Parse(row["visit_Logout_DateTime"].ToString());
          if (dtlogout != null)
          {
            if (cbPeriod.Text == "Today")
            {
              newItem.lblTime.Text = dtlogout.ToString("HH':'mm':'ss");

            }
            else
              newItem.lblTime.Text = dtlogout.ToString("yyyy'-'MM'-'dd'  -  'HH':'mm':'ss");
          }
        }

     }

但我在此行DateTime dtlogout = DateTime.Parse(row["visit_Logout_DateTime"].ToString());

收到错误

错误: string was not recognised as valid datetime (because of one value in that row is empty)

"visit_Logout_DateTime"

我有"visit_Logout_DateTime"这样的价值......

firstname     lastname   postcode      visit_Logout_DateTime
-------------  --------   ---------      ---------------------
 rob            peter     hhd344h            
 peter         chan        hy78kjk         2011-09-08 12:09:08
 rock          sam        yudufg3746h      2011-08-08 09:08:45

我已经尝试过检查这个visit_Logout_DateTime的空值,就像我上面提到的那样..

但是因为chacking永远没有价值是空的或不在那一行......

如何检查此行中的每个值(row [“visit_Logout_DateTime”])是否为空

任何人都会帮助我这些家伙......

非常感谢....

5 个答案:

答案 0 :(得分:4)

您应该检查列的内容是否为null,而不是检查列是否为null。您可以通过将其与DBNull.Value进行比较来实现:

if (row["visit_Logout_DateTime"] != DBNull.Value)
{
    ...
}

答案 1 :(得分:1)

首先 - 当你不确定该值是否为有效对象时,使用TryParse,而不是Parse来解析值。

要检查所有值,请尝试以下代码示例来检查每个值:

        DataTable dt = new DataTable("MyTable");

        foreach (DataRow row in dt.Rows)
        {
            foreach (DataColumn column in dt.Columns)
            {
                if (row[column] != null)
                {
                    string value = row[column].ToString();
                    if (!String.IsNullOrEmpty(value))
                    {
                        // Do something
                    }
                }
            }
        }

答案 2 :(得分:1)

您可以像这样使用DateTime.TryParse

DateTime date = new DateTime();

if (DateTime.TryParse(row["visit_Logout_DateTime"], out date))
            dtlogout = date;

答案 3 :(得分:0)

您无法针对null检查行。您应该与DBNull.Value进行比较。 所以,请选择:

row["visit_Logout_DateTime"] != DBNull.Value

!string.IsNullOrEmpty(row["visit_Logout_DateTime"].ToString())

答案 4 :(得分:0)

为了扩展Kristof的答案,您可以查看扩展方法以稍微整理代码;

 public static DateTime? GetDate( this DataRow Row, string ColumnName )
    {

        object Value = Row[ ColumnName ];

        if( Value == DBNull.Value )
            return null;
        else
            return (DateTime)Value;

    }

// Repeat for other types, or use a generic version.
...

DateTime? dtlogout = row.GetDate("visit_Logout_DateTime");

注意使用Nullable DateTime(尾随?)以便它可以接受空值。