我有两个名为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的空值,就像我上面提到的那样..
但是因为chacking永远没有价值是空的或不在那一行......
如何检查此行中的每个值(row [“visit_Logout_DateTime”])是否为空
任何人都会帮助我这些家伙......
非常感谢....答案 0 :(得分:4)
您应该检查列的内容是否为null
,而不是检查列是否为null
。您可以通过将其与DBNull.Value
进行比较来实现:
if (row["visit_Logout_DateTime"] != DBNull.Value)
{
...
}
答案 1 :(得分: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
}
}
}
}
答案 2 :(得分:1)
您可以像这样使用DateTime.TryParse
:
DateTime date = new DateTime();
if (DateTime.TryParse(row["visit_Logout_DateTime"], out date))
dtlogout = date;
答案 3 :(得分:0)
您无法针对null
检查行。您应该与DBNull.Value
进行比较。
所以,请选择:
row["visit_Logout_DateTime"] != DBNull.Value
或
!string.IsNullOrEmpty(row["visit_Logout_DateTime"].ToString())
答案 4 :(得分:0)
为了扩展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(尾随?)以便它可以接受空值。