どのようにC#を使用してdatatableの行のすべての値をチェックする

visitsmembers という2つのテーブルがあり、次のクエリを使用してデータを取得しています。

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

     }

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
追加された

最初のことは、値が有効なオブジェクトであるかどうかわからないときに、ParseではなくTryParseを使用して値を解析します。

すべての値を確認するには、各値をチェックする次のコード例を試してください。

        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
追加された
ありがとう...しかし、nullまたは空で、私はString.IsNullOrEmptyを試みたが、私は同じエラーが発生しているかどうか、その行のすべての値をチェックする必要があります
追加された 著者 rockyashkumar,
Kristofのアイデアの下でその解決策を試してみてください
追加された 著者 Denis Mazourick,

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(末尾の?)を使用することに注意してください。

0
追加された

null に対して行をチェックすることはできません。 DBNull.Value と比較する必要があります。 だから、一緒に行く:

row["visit_Logout_DateTime"] != DBNull.Value

または

!string.IsNullまたはEmpty(row["visit_Logout_DateTime"].ToString())
0
追加された