c # kullanarak datatable satırındaki her değeri nasıl kontrol edilir

ziyaretleri ve üyeleri olarak adlandırılan iki tablom var ve aşağıdaki sorguyu kullanarak veri alıyorum ..

 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%'";

Burada, combobox değerleriyle bazı karşılaştırmaları kullanarak visit_DateTime değerlerini alıyorum

    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)

satır "visit_Logout_DateTime"

"visit_Logout_DateTime" değerlerini aldım.

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

Yukarıda bahsettiğim gibi bu visit_Logout_DateTime boş değerlerini kontrol ettiğiniz için denedim.

ama hiç bozmadığım için başarısız oldum o satırda boş ya da değil ...

Bu satırdaki her değerin nasıl kontrol edileceği (satır ["visit_Logout_DateTime"]) boş veya değil

Bu adamlar bana yardım eder mi?

çok teşekkürler....

0

5 cevap

Sütunun null olup olmadığını kontrol etmek yerine, sütunun içeriğinin null olup olmadığını kontrol etmelisiniz. Bunu DBNull.Value ile karşılaştırarak yapabilirsiniz:

if (row["visit_Logout_DateTime"] != DBNull.Value)
{
    ...
}
4
katma
Teşekkürler mükemmel .......
katma yazar rockyashkumar, kaynak

DateTime.TryParse 'ı şöyle kullanabilirsin:

DateTime date = new DateTime();

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

İlk şey - değerin geçerli bir nesne olup olmadığından emin olmadığınızda değerleri ayrıştırmak için TryParse, Parse değil kullanın.

Tüm değerleri kontrol etmek için, her bir değeri kontrol etmek için aşağıdaki kod örneğini deneyin:

        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
katma
teşekkürler ... ama bu satırdaki her değeri null veya boş olup olmadığını kontrol etmem ve String.IsNullOrEmpty'yi denedim ama yine de aynı hatayı alıyorum
katma yazar rockyashkumar, kaynak
Bu çözümü Kristof'un fikriyle deneyin.
katma yazar Denis Mazourick, kaynak

Kristof'un cevabını genişletmek için, kodu düzenli olarak toparlamak için uzatma yöntemlerine bakabilirsiniz;

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

Null'leri kabul edebilmeleri için NULLLEN DateTime (sonlandırma?) Kullanıldığını unutmayın.

0
katma

Satırı null ile karşılaştıramazsınız. DBNull.Value ile karşılaştırmalısınız. Yani, ya git:

row["visit_Logout_DateTime"] != DBNull.Value

veya

!string.IsNullveyaEmpty(row["visit_Logout_DateTime"].ToString())
0
katma