.net - net - llenar datatable c# desde sql
¿Cómo averiguo si existe una columna en un VB.Net DataRow? (4)
DataRow es agradable 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
Estoy leyendo un archivo XML en un DataSet y necesito sacar 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.
Ya compruebo DBNull, pero no sé cómo asegurarme de que la columna existe sin tener que arrojar una excepción o utilizar una función que recorre todos los nombres de las columnas. ¿Cuál es el mejor método para hacer esto?
Otra forma de averiguar si existe una columna es verificar en Nothing
el valor devuelto por el indexador de la colección Columns
al pasarle el nombre de la columna:
If dataRow.Table.Columns("ColumnName") IsNot Nothing Then
MsgBox("YAY")
End If
Este enfoque puede ser preferible a uno que utiliza el método Contains("ColumnName")
cuando el siguiente código posteriormente tendrá que obtener ese DataColumn
para su 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 los Contains("ColumnName")
al mismo tiempo, haciendo que su código sea un poco más limpio.
Puede encapsular su bloque de código con una instrucció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".
Puede usar DataSet.Tables(0).Columns.Contains(name)
para verificar si DataTable
contiene una columna con un nombre particular.