在VB.net中处理空数据库项的最安全方法

时间:2016-07-17 10:54:54

标签: database vb.net visual-studio

对于诸如DataGridView项或数据集项之类的对象,可以安全地使用.tostring方法来对抗可能的DBnull吗?

该应用程序是一个mysqlconnector fed数据库应用程序,几乎使用标准查询,但我确实遇到了DBNull相当多。记住编码效率,以下是安全的吗?

Module DataCheck
Public Function SafeDataSTR(DBItem As Object) As String
    If Not (IsDBNull(DBItem)) Or Not (IsNothing(DBItem)) Then
        Return DBItem.ToString
    Else
        Return ""
    End If
End Function
End Module

'Elsewhere in the galaxy....'
With tempDS.Rows.Item(0)  'tempDS is a standard dataset'
Textbox1.Text = SafeDataSTR(.Item("SupplierDetails")) 'Not necessarily a text box, just an example'

最初的解决方案是:

If Not IsDBNull(.Item("JobDescription")) Then _
     jobinfo.Job_Description = .Item("JobDescription")

过去哪种方法有效,但有哪种更安全的方法来保护自己免受这些影响?

编辑:对不起,DataRow.item(“Column”)。tostring是否同样安全?

编辑:最终版本:

 Public Function SafeData_Rowfeed(row As DataRow, ItemName As String) As String
    Try
        If Not (IsDBNull(row.Item(ItemName))) Then
            Return row.Item(ItemName).ToString
        ElseIf IsNothing(ItemName) Then
            Throw New IndexOutOfRangeException("Supplied Column " & ItemName & "Not found or is Nothing")
        Else
            Return ""
        End If
    Catch ex As System.ArgumentException
        Console.WriteLine(ex.Message)
        Return "Column Does Not Exist"
    End Try
End Function

2 个答案:

答案 0 :(得分:0)

  

将DataRow.item(“Column”)。tostring

不,如果DataRow.item("Column")为null,则调用ToString将导致空引用异常。

你所拥有的是最安全的方法。

在C#6和VB 14中有?.语法,但这基本上编译成你所拥有的相同的东西,尽管它将占用少一行代码:

stringValue = DataRow.item("Column")?.ToString

虽然这总是会设置stringValue,所以如果您希望它在列为空时保留其当前值,那么现有代码仍然是执行此操作的最佳方式。

答案 1 :(得分:0)

你可以简化'

Public Function SafeDataSTR(DBItem As Object) As String
    Return If(IsDBNull(DBItem), "", If(DBItem.ToString, ""))
End Function

If(DBItem.ToString, "")检查DBItem.ToString是否为Nothing https://msdn.microsoft.com/en-us/library/bb513985.aspx

您对它的使用使其不是最安全的方法,因为项"SupplierDetails"可能不存在。