【发布时间】:2013-07-09 07:36:49
【问题描述】:
如果我有一个DataRow 值并且我想将它分配给一个String 变量,如果DataRow 值是Null,以下是执行此操作并分配一个空字符串的有效方法吗?
Dim string1 As String = If(myDataRow("column1"), "")
【问题讨论】:
标签: .net vb.net string if-statement null
如果我有一个DataRow 值并且我想将它分配给一个String 变量,如果DataRow 值是Null,以下是执行此操作并分配一个空字符串的有效方法吗?
Dim string1 As String = If(myDataRow("column1"), "")
【问题讨论】:
标签: .net vb.net string if-statement null
您的代码将不起作用,因为 myDataRow("column1") 不是 Nothing 而是 DBNull.Value。
我会使用强类型Field 扩展方法,它也支持可空类型;
Dim string1 = If(myDataRow.Field(Of String)("column1"), "")
如果你想使用旧的方式:
Dim string1 = If(myDataRow.IsNull("column1"), "", DirectCast(myDataRow("column1"), String))
【讨论】:
DataRow.Field 在 VS2010 中吗?
DirectCast 有必要吗?我认为DataRow 值是根据其数据库源类型键入的?
System.Data.DataSetExtensions.dll 添加到项目的引用中。 DirectCast 是必需的,因为 myDataRow("column1") 是 Object 类型。如果没有必要,您应该立即将OPTION STRICT 设置为on ;-)
myDataRow("column1").IsNull 比IsDBNull(myDataRow("column1") 更受欢迎吗?
DataRow.IsNull,而不是可能有效或无效的“神奇”辅助函数。但是,它不是myDataRow("column1").IsNull,而是myDataRow.IsNull("column1")。我更愿意知道会发生什么。这就是为什么我也更喜欢int.Parse 而不是Convert.ToInt32。此外,Convert 方法通常必须转换为其他效率较低的类型。
我建议创建一个这样的函数:
Shared Function DBNull2Space(ByVal objValue As Object) As Object
If IsDBNull(objValue) Then
DBNull2Space = Space(0)
Else
DBNull2Space = objValue
End If
End Function
这是对函数的调用:
Dim strTest as String = DBNull2Space(myDataRow("column1"))
【讨论】:
String而不是一个Object。您对该函数的调用将因 Option Strict On 而失败,因此这是更改它的另一个原因
试试这个..
Dim string1 As String = If(IsDBNull(myDataRow.Item("column1")), "",myDataRow.Item("column1"))
【讨论】:
IsDBNull(myDataRow("column1") 比 myDataRow("column1").IsNull 更受欢迎吗?