2008-10-07 19 views
48

Estoy leyendo un archivo XML en un DataSet y necesito obtener los datos del DataSet. Como es un archivo de configuración editable por el usuario, los campos pueden o no estar allí. Para manejar bien los campos que faltan, me gustaría asegurarme de que cada columna en el DataRow exista y no sea DBNull.Cómo averiguo si existe una columna en una VB.Net DataRow

Ya compruebo si hay DBNull, pero no sé cómo asegurarme de que la columna existe sin que arroje una excepción o utilice una función que recorre todos los nombres de las columnas. ¿Cuál es el mejor método para hacer esto?

Respuesta

144

DataRow son agradables en la forma en que tienen su tabla subyacente vinculada a ellos. Con la tabla subyacente puede verificar que una fila específica tenga una columna específica.

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

Puede encapsular su bloque de código con una declaración try ... catch, y cuando ejecuta su código, si la columna no existe arrojará una excepción. A continuación, puede averiguar qué excepción específica arroja y hacer que maneje esa excepción específica de una manera diferente si lo desea, como devolver "Columna no encontrada".

+7

Siempre es una mejor idea comprobar si hay errores sin tener que recurrir a un try ... catch block; solo debe usarse como último recurso. –

15

Puede usar DataSet.Tables(0).Columns.Contains(name) para verificar si el DataTable contiene una columna con un nombre particular.

2

Otra forma de averiguar si existe una columna es para comprobar si hay Nothing el valor devuelto por el indexador colección Columns al pasar el nombre de la columna a la misma:

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

Este enfoque podría ser preferible a el que usa el método Contains("ColumnName") cuando el siguiente código tendrá que obtener ese DataColumn para un uso posterior. Por ejemplo, es posible que desee saber qué tipo tiene un valor almacenado en la columna:

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

En este caso, este enfoque le ahorra una llamada a la Contains("ColumnName") al mismo tiempo haciendo su código un poco más limpia.

Cuestiones relacionadas