我有这样的代码:
foreach (DataRow row in dataTable.Rows) { if ((string)row["Forename"] != record.Forename) { // Do something } }
工作得很好,但是如果数据库中的row [“Forename”]为空,那么它实际上是DBNull,它不能将DBNull转换为字符串,或者执行DBNull和string之间的比较.有些值也是可以为空的< int>,它无法将DBNull与int进行比较?
解决方法
您可以使用支持可空类型的
DataRow.Field
扩展方法:
foreach (DataRow row in dataTable.Rows) { int? id = row.Field<int?>("ID"); if(id.HasValue) { Console.Write("ID: " + id.Value); } }
由于string是引用类型,因此默认情况下它将为null.您可以使用DataRow.IsNull
来检查它是否是DBNull.Value:
foreach (DataRow row in dataTable.Rows) { if(row.IsNull("Forename")) { // ... } else { string foreName = row.Field<string>("Forename"); Console.Write("ForeName: " + foreName); } }