2008-10-07 117 views
48

我正在將XML文件讀入DataSet中,並且需要從DataSet中獲取數據。由於它是一個用戶可編輯的配置文件,這些字段可能會或可能不在。爲了處理缺失的字段,我想確保DataRow中的每一列都存在,而不是DBNull。如何找出列中是否存在VB.Net DataRow

我已經檢查過DBNull,但我不知道如何確保列存在,而不會引發異常或使用循環遍歷所有列名的函數。什麼是最好的方法來做到這一點?

回答

144

DataRow的很好,他們有他們的基礎表連接到他們的方式。通過底層表,您可以驗證特定行中是否有特定列。

If DataRow.Table.Columns.Contains("column") Then 
     MsgBox("YAY") 
    End If 
-4

您可以用try ... catch語句封裝您的代碼塊,並且當您運行代碼時,如果該列不存在,則會引發異常。然後你可以找出它引發了什麼特定的異常,並且如果你願意,以不同的方式處理那個特定的異常,例如返回「找不到列」。

+7

無需訴諸try ... catch塊,檢查錯誤總是一個更好的主意;它應該只能用作最後的手段。 – 2010-02-22 09:05:42

15

您可以使用DataSet.Tables(0).Columns.Contains(name)來檢查DataTable是否包含具有特定名稱的列。

2

另一種方法來找出一個列上存在是檢查Nothing通過列名,就當從Columns集合索引返回值:

If dataRow.Table.Columns("ColumnName") IsNot Nothing Then 
    MsgBox("YAY") 
End If 

這種方法可能會優於當以下代碼隨後需要獲得DataColumn以供進一步使用時,該方法使用Contains("ColumnName")方法。例如,你可能想知道哪種類型的具有存儲在列中的值:

Dim column = DataRow.Table.Columns("ColumnName") 
If column IsNot Nothing Then 
    Dim type = column.DataType 
End If 

在這種情況下這種做法可以節省您的Contains("ColumnName")一個電話在同一時間,使你的代碼有點清潔。