英文:
vb.net DataTable Select Where Statement throws error (DBNull Value)
问题
我想要检索在“PreparedBy”列中值不为空(“”)的出现次数(获取计数)。
为此,我构建了一个选择条件语句,但它抛出了一个错误,因为数据表列可以包含一个空字符串(“”)或一个不等于空字符串(“”)的字符串。但在初始化时,该列为空(DBNull.Value),因此它是空的但不是(“”)。
我尝试使用内部的if(IIF)来解决这个问题,但一旦我尝试询问与“ISDBNULL”之外的内容时,它就会抛出错误。
以下是代码示例:
Dim iCountPrepared As Integer = dtLeft.Select().Where(Function(s) CType(s("Type"), String) = "Dep" And Not CType(IIf(IsDBNull(s("PreparedBy")), "", CType(s("PreparedBy"), String)), String) = "").Count()
仅需检查字段是否为DBNull.Value是不够的,重要的是要检查该值是否不为空(“”)。
希望对你有所帮助。
英文:
I want to retrieve the number of occurences (get count) in Column "PreparedBy" where the value is not empty ("").
To do so I build a Select Where Statement but it throws an error, because the datatable column can contain a string of nothing ("") or a string not equal to ("").
But on initialization the column is empty (DBNull.Value), so it is empty but not ("").
I tried to solve it with an inner if (IIF) but as soon as I try ask something else than "ISDBNULL" it throws the error.
Dim iCountPrepared As Integer = dtLeft.Select().Where(Function(s) CType(s("Type"), String) = "Dep" And Not CType(IIf(IsDBNull(s("PreparedBy")), "", CType(s("PreparedBy"), String)), String) = "").Count()
It is not enough to check whether the field is DBNull.Value, it is important to check whether the value is not empty ("").
Any help appreciated.
答案1
得分: 3
The DataRow
类有它自己的 IsNull
方法来检查数据库中的 NULL,即 DBNull.Value
,所以你应该使用它。这将给你在特定列中不是 NULL 或 Nothing
的行数:
Dim count = table.AsEnumerable().Count(Function(dr) Not dr.IsNull("Column1") AndAlso
dr.Field(Of String)("Column1") <> String.Empty)
值得注意的是,DBNull.ToString
方法返回一个空字符串,所以你也可以这样做:
Dim count = table.AsEnumerable().Count(Function(dr) dr("Column1").ToString() <> String.Empty)
英文:
The DataRow
class has its own IsNull
method to check for database NULLs, i.e. DBNull.Value
, so you should be using that. This will give you the count of rows that are not NULL or Nothing
in a particular column:
Dim count = table.AsEnumerable().Count(Function(dr) Not dr.IsNull("Column1") AndAlso
dr.Field(Of String)("Column1") <> String.Empty)
It's also worth noting that the DBNull.ToString
method returns an empty string, so you could do this:
Dim count = table.AsEnumerable().Count(Function(dr) dr("Column1").ToString() <> String.Empty)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论