Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 将数据库值分配给字符串类型变量的最佳方法?_.net_Vb.net_String_If Statement_Null - Fatal编程技术网

.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..但不管怎样,这对你有帮助吗?