【问题标题】:Best way to assign database value to a String type variable?将数据库值分配给字符串类型变量的最佳方法?
【发布时间】:2013-07-09 07:36:49
【问题描述】:

如果我有一个DataRow 值并且我想将它分配给一个String 变量,如果DataRow 值是Null,以下是执行此操作并分配一个空字符串的有效方法吗?

Dim string1 As String = If(myDataRow("column1"), "")

【问题讨论】:

    标签: .net vb.net string if-statement null


    【解决方案1】:

    您的代码将不起作用,因为 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 值是根据其数据库源类型键入的?
    • @CJ7:是的,它在 .NET 4 中可用。也许你已经升级了这个项目。然后您需要将System.Data.DataSetExtensions.dll 添加到项目的引用中。 DirectCast 是必需的,因为 myDataRow("column1")Object 类型。如果没有必要,您应该立即将OPTION STRICT 设置为on ;-)
    • myDataRow("column1").IsNullIsDBNull(myDataRow("column1") 更受欢迎吗?
    • @CJ7:我更喜欢DataRow.IsNull,而不是可能有效或无效的“神奇”辅助函数。但是,它不是myDataRow("column1").IsNull,而是myDataRow.IsNull("column1")。我更愿意知道会发生什么。这就是为什么我也更喜欢int.Parse 而不是Convert.ToInt32。此外,Convert 方法通常必须转换为其他效率较低的类型。
    【解决方案2】:

    我建议创建一个这样的函数:

    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 而失败,因此这是更改它的另一个原因
    • 谢谢!从来没有注意到,自从我在 2004 年创建了这个函数并将它放在我的库中! :) 我认为我这样声明它是因为我只是反转了一个 Space2DBNull 函数,该函数必须返回一个对象(DBNull.Value 或 objValue)。
    【解决方案3】:

    试试这个..

    Dim string1 As String = If(IsDBNull(myDataRow.Item("column1")), "",myDataRow.Item("column1"))
    

    【讨论】:

    • 您应该使用 IF 运算符而不是 IIF 函数,因为它提供了短路和类型安全性
    • IsDBNull(myDataRow("column1")myDataRow("column1").IsNull 更受欢迎吗?
    • @CJ7 .. 我想是的,不同的是 IsDBNull 是函数, IsNull 是方法 .. 但无论如何,这对你有帮助吗?
    猜你喜欢
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2018-11-01
    • 2012-03-03
    • 1970-01-01
    • 2018-02-05
    相关资源
    最近更新 更多