对于诸如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
答案 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"
可能不存在。