як перевірити кожне значення в рядку datatable за допомогою c #

У мене є дві таблиці, які називаються 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 за допомогою деяких порівнянь з значеннями combobox

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

     }

but i got the error at this line DateTime dtlogout = DateTime.Parse(row["visit_Logout_DateTime"].ToString());

error : 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"]) порожній чи ні

будь-який PLS допомогти мені на цих хлопців ...

дуже дякую....

0

5 Відповіді

Замість того, щоб перевіряти, чи є стовпчик null , ви повинні перевірити, чи вміст стовпця є null . Ви можете зробити це, порівнявши його з DBNull.Value :

if (row["visit_Logout_DateTime"] != DBNull.Value)
{
    ...
}
4
додано
Спасибі ідеально .......
додано Автор rockyashkumar, джерело

Ви можете використовувати DateTime.TryParse таким чином:

DateTime date = new DateTime();

if (DateTime.TryParse(row["visit_Logout_DateTime"], out date))
            dtlogout = date;
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
                    }
                }
            }
        }
1
додано
дякую ... але мені потрібно перевірити кожне значення в цьому рядку, чи є він нульовим або порожнім, і я спробував String.IsNullOrEmpty, але все одно я отримую таку ж помилку
додано Автор rockyashkumar, джерело
Спробуйте це рішення нижче ідеї Кріфофа
додано Автор Denis Mazourick, джерело

Щоб розширити відповідь Крістіфа, ви можете переглянути методи розширення, щоб трохи покращити код;

 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 (trailing?), Щоб він міг прийняти нульові значення.

0
додано

Ви не можете перевірити рядок проти null . Ви повинні порівняти з DBNull.Value . Отже, будь то:

row["visit_Logout_DateTime"] != DBNull.Value

або

!string.IsNullабоEmpty(row["visit_Logout_DateTime"].ToString())
0
додано
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug