【问题标题】:how to check every value in row of datatable using c#如何使用c#检查数据表行中的每个值
【发布时间】:2011-12-17 04:14:30
【问题描述】:

我有两个名为 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 的空值..

但我无法检查该行中的值是否为空...

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

有人能帮我解决这个问题吗...

非常感谢....

【问题讨论】:

    标签: c# .net winforms datatable datarow


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      第一件事 - 当您不确定值是否是有效对象时,使用 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
                          }
                      }
                  }
              }
      

      【讨论】:

      • 谢谢...但我需要检查该行中的每个值是否为空或空,我已经尝试过 String.IsNullOrEmpty 但我仍然遇到同样的错误
      • 按照 Kristof 的想法尝试该解决方案
      【解决方案3】:

      你可以像这样使用DateTime.TryParse

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

      【讨论】:

        【解决方案4】:

        您无法根据null 检查行。您应该与DBNull.Value 进行比较。 所以,要么选择:

        row["visit_Logout_DateTime"] != DBNull.Value
        

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

        【讨论】:

          【解决方案5】:

          要扩展 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(尾随?),以便它可以接受空值。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-03-07
            • 1970-01-01
            • 1970-01-01
            • 2012-02-11
            • 2013-04-10
            • 2019-08-02
            • 1970-01-01
            相关资源
            最近更新 更多