.net 将数据库值分配给字符串类型变量的最佳方法?
如果我有一个.net 将数据库值分配给字符串类型变量的最佳方法?,.net,vb.net,string,if-statement,null,.net,Vb.net,String,If Statement,Null,如果我有一个DataRow值,并且我想将其分配给一个String变量,那么如果DataRow值为Null,下面的方法是否有效,并分配一个空字符串 Dim string1 As String = If(myDataRow("column1"), "") 由于myDataRow(“column1”)不是Nothing,而是DBNull.Value,因此您的代码将无法工作 我将使用强类型字段扩展方法,该方法也支持可空类型 Dim string1 = If(myDataRow.Field(Of Str
DataRow
值,并且我想将其分配给一个String
变量,那么如果DataRow
值为Null
,下面的方法是否有效,并分配一个空字符串
Dim string1 As String = If(myDataRow("column1"), "")
由于
myDataRow(“column1”)
不是Nothing
,而是DBNull.Value
,因此您的代码将无法工作
我将使用强类型字段
扩展方法,该方法也支持可空类型
Dim string1 = If(myDataRow.Field(Of String)("column1"), "")
如果要使用旧方法:
Dim string1 = If(myDataRow.IsNull("column1"), "", DirectCast(myDataRow("column1"), String))
由于
myDataRow(“column1”)
不是Nothing
,而是DBNull.Value
,因此您的代码将无法工作
我将使用强类型字段
扩展方法,该方法也支持可空类型
Dim string1 = If(myDataRow.Field(Of String)("column1"), "")
如果要使用旧方法:
Dim string1 = If(myDataRow.IsNull("column1"), "", DirectCast(myDataRow("column1"), String))
我建议创建如下函数:
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"))
我建议创建如下函数:
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"))
试试这个
Dim string1 As String = If(IsDBNull(myDataRow.Item("column1")), "",myDataRow.Item("column1"))
试试这个
Dim string1 As String = If(IsDBNull(myDataRow.Item("column1")), "",myDataRow.Item("column1"))
VS2010中是否有
DataRow.Field
?是否需要DirectCast
?我以为DataRow
值是根据它们的数据库源类型键入的?@CJ7:是的,它在.NET 4中可用。也许你已经升级了这个项目。然后需要将System.Data.DataSetExtensions.dll
添加到项目的引用中。由于myDataRow(“column1”)
属于Object类型,因此需要使用DirectCast
。如果没有必要,您应该立即将选项STRICT
设置为on
;-)是myDataRow(“column1”).IsNull
优于IsDBNull(myDataRow(“column1”)
?@CJ7:我更喜欢DataRow.IsNull
而不是可能工作或不工作的“神奇”辅助函数。然而,它不是myDataRow(“column1”).IsNull
而是myDataRow.IsNull(“column1”)
。我更喜欢知道会发生什么。这就是为什么我也更喜欢int.Parse
而不是Convert.ToInt32
。此外,Convert
方法通常必须转换为效率较低的其他类型。VS2010中的DataRow.Field
是否需要DirectCast
呢?我认为DataRow
值是典型的根据他们的数据库源类型编辑?@CJ7:是的,它在.NET 4中可用。可能您已经升级了此项目。然后您需要将System.Data.DataSetExtensions.dll
添加到项目的引用中。由于myDataRow(“column1”)的原因,DirectCast
是必需的
属于对象类型
。如果没有必要,您应该立即将选项STRICT
设置为打开
;-)是myDataRow(“column1”)。IsNull
优于IsDBNull(myDataRow(“column1”)
。@CJ7:我更喜欢DataRow.IsNull
,而不是“magic”helper函数,它可能工作或不工作。但是,它不是myDataRow(“column1”).IsNull,而是myDataRow.IsNull(“column1”)
。我更喜欢知道会发生什么。这就是为什么我也更喜欢int.Parse
而不是Convert.ToInt32
。此外,Convert
方法通常必须强制转换为效率较低的其他类型。此函数仅对字符串类型有用,因此您最好返回String
而不是对象e> 。您对该函数的调用将失败,因为Option Strict On处于当前状态,因此这是更改它的另一个原因Hanks!从未注意到,因为我在2004年创建了该函数并将其放入我的库中!:)我想我这样声明它,因为我只是反转了一个必须返回对象(DBNull.Value或objValue)的Space2DBNull函数。此函数仅对字符串类型有用,因此您最好返回字符串
,而不是对象
。您对函数的调用将失败,因为Option Strict On保持不变,因此这是更改itThanks的另一个原因!我从来没有注意到,自从我在2004年创建了这个函数并将其放入我的库中以来!:)我想我这样声明它是因为我简单地反转了一个必须返回一个对象(DBNull.Value或objValue)的Space2DBNull函数。您应该使用IF操作符而不是IIF函数,因为它提供短路和类型安全性是IsDBNull(myDataRow(“column1”)
首选myDataRow(“column1”).IsNull
?@CJ7..我认为是这样,不同的是IsDBNull是函数,IsNull是methode..但不管怎样,这对您有帮助吗?您应该使用IF运算符而不是IIF函数,因为它提供短路和类型安全是IsDBNull(myDataRow(“column1”)
首选myDataRow(“column1”).IsNull
?@CJ7..我想是的,不同的是IsDBNull是函数,IsNull是methode..但不管怎样,这对你有帮助吗?