2008-10-07 58 views
48

Tôi đang đọc một tệp XML vào một Số liệu và cần lấy dữ liệu ra khỏi Tập dữ liệu hay không. Vì đây là tệp cấu hình có thể chỉnh sửa người dùng, các trường có thể có hoặc không có ở đó. Để xử lý các trường bị thiếu tốt, tôi muốn đảm bảo mỗi cột trong DataRow tồn tại và không phải là DBNull.Làm cách nào để tìm hiểu xem một cột có tồn tại trong VB.Net DataRow

Tôi đã kiểm tra DBNull nhưng tôi không biết làm thế nào để đảm bảo cột tồn tại mà không có nó ném một ngoại lệ hoặc sử dụng một hàm lặp trên tất cả các tên cột. Phương pháp tốt nhất để làm điều này là gì?

Trả lời

144

DataRow là tốt đẹp trong cách mà họ có bảng cơ bản của họ liên kết với họ. Với bảng bên dưới, bạn có thể xác minh rằng một hàng cụ thể có một cột cụ thể trong đó.

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

Bạn có thể gói gọn khối mã của mình bằng câu lệnh try ... catch và khi bạn chạy mã, nếu cột không tồn tại, nó sẽ ném một ngoại lệ. Sau đó bạn có thể tìm ra ngoại lệ cụ thể mà nó ném và có nó xử lý ngoại lệ cụ thể theo một cách khác nếu bạn muốn, chẳng hạn như trả về "Cột Không tìm thấy".

+7

Nó luôn luôn là một ý tưởng tốt hơn để kiểm tra lỗi mà không cần phải dùng đến một khối try ... catch; nó chỉ nên được sử dụng như một phương sách cuối cùng. –

15

Bạn có thể sử dụng DataSet.Tables(0).Columns.Contains(name) để kiểm tra xem DataTable có chứa cột có tên cụ thể hay không.

2

Một cách khác để tìm hiểu xem một cột tồn tại là để kiểm tra Nothing giá trị trả về từ các bộ sưu tập indexer Columns khi đi qua các tên cột với nó:

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

Cách tiếp cận này có thể được ưa thích hơn một trong đó sử dụng phương pháp Contains("ColumnName") khi mã sau đây sau đó sẽ cần để có được rằng DataColumn để sử dụng thêm. Ví dụ, bạn có thể muốn biết loại có giá trị được lưu trữ trong cột:

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

Trong trường hợp này phương pháp này giúp bạn tiết kiệm một cuộc gọi đến Contains("ColumnName") cùng một lúc làm cho mã của bạn một chút bụi.

Các vấn đề liên quan