как проверить каждое значение в строке datatable с помощью c#

#c# #.net #winforms #datatable #datarow

#c# #.net #winforms #datatable #datarow

Вопрос:

У меня есть две вызванные таблицы visits members , и я получаю данные с помощью следующего запроса..

  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, как я упоминал выше..

но мне не удалось проверить, является ли значение пустым или отсутствует в этой строке…

как проверить, является ли каждое значение в этой строке (строка [«visit_Logout_DateTime»]) пустым или нет

кто-нибудь, пожалуйста, помогите мне в этом, ребята…

большое спасибо….

Ответ №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
                    }
                }
            }
        }
 

Комментарии:

1. Спасибо… но мне нужно проверить каждое значение в этой строке, является ли оно нулевым или пустым, и я попробовал String . IsNullOrEmpty но я все равно получаю ту же ошибку

2. Попробуйте это решение с приведенной ниже идеей Кристофа

Ответ №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:

Чтобы расширить ответ Кристофа, вы могли бы взглянуть на методы расширения, чтобы немного привести в порядок код;

  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");
 

Обратите внимание на использование обнуляемого DateTime (завершающего ?) чтобы он мог принимать нули.