c# - check - cómo verificar si un lector de datos es nulo o está vacío
c# mysql reader null value (11)
@Joe Philllips
SQlDataReader.IsDBNull (int index) requiere el número ordinal de la columna. ¿Hay alguna manera de verificar nulos utilizando el nombre de la columna y no su número ordinal?
Tengo un lector de datos que devuelve un lsit de registros de una base de datos de servidor sql. Tengo un campo en la base de datos llamado "Adicional". Este campo es el 50% del tiempo vacío o nulo.
Estoy tratando de escribir un código que compruebe si este campo es nulo. La lógica detrás de esto es: si el campo "Adicional" contiene texto, entonces muestre la información, de lo contrario, oculte el campo.
Yo he tratado:
if (myReader["Additional"] != null)
{
ltlAdditional.Text = "contains data";
}
else
{
ltlAdditional.Text = "is null";
}
El código anterior me da este error:
Detalles de la excepción: System.IndexOutOfRangeException: Additional
Cualquier ayuda sería muy apreciada ...
Ver también:
Verificar el nombre de la columna en un objeto SqlDataReader
AMG - Lo siento todo, estaba teniendo un momento rubio. El campo "Adicional" se agregó a la base de datos después de haber diseñado inicialmente la base de datos.
Actualicé todo mi código para usar este nuevo campo, sin embargo, olvidé actualizar el código actual del lector de datos que estaba haciendo la llamada para seleccionar los campos de la base de datos, por lo tanto, no estaba llamando "Adicional"
Además de las sugerencias dadas, puedes hacer esto directamente desde tu consulta como esta:
SELECT ISNULL([Additional], -1) AS [Additional]
De esta forma puede escribir la condición para verificar si el valor del campo es <0 o> = 0.
En primer lugar, es probable que desee comprobar si hay un DBNull
no un valor Null
normal.
O podrías mirar el método IsDBNull
Esta
Ejemplo:
objCar.StrDescription = (objSqlDataReader["fieldDescription"].GetType() != typeof(DBNull)) ? (String)objSqlDataReader["fieldDescription"] : "";
Esta es la solución correcta y probada
if (myReader.Read())
{
ltlAdditional.Text = "Contains data";
}
else
{
ltlAdditional.Text = "Is null";
}
No he usado DataReaders por más de 3 años, así que quería confirmar mi memoria y encontré esto. De todos modos, para cualquiera que encuentre esta publicación como lo hice y quiera un método para probar IsDBNull usando el nombre de la columna en lugar del número ordinal, y está usando VS 2008+ (& .NET 3.5, creo), puede escribir un método de extensión para que pueda pasar el nombre de la columna en:
public static class DataReaderExtensions
{
public static bool IsDBNull( this IDataReader dataReader, string columnName )
{
return dataReader[columnName] == DBNull.Value;
}
}
Kevin
También estoy experimentando este tipo de problema, pero el mío, estoy usando DbDataReader como mi lector genérico (para SQL, Oracle, OleDb, etc.). Si usa DataTable, DataTable tiene este método:
DataTable dt = new DataTable();
dt.Rows[0].Table.Columns.Contains("SampleColumn");
Usando esto, puedo determinar si esa columna existe en el conjunto de resultados que tiene mi consulta. También estoy buscando si DbDataReader tiene esta capacidad.
También uso OleDbDataReader.IsDBNull ()
if ( myReader.IsDBNull(colNum) ) { retrievedValue = ""; }
else { retrievedValue = myReader.GetString(colNum); }
if (myReader.HasRows) //The key Word is **.HasRows**
{
ltlAdditional.Text = "Contains data";
}
else
{
ltlAdditional.Text = "Is null Or Empty";
}
if (myReader["Additional"] != DBNull.Value)
{
ltlAdditional.Text = "contains data";
}
else
{
ltlAdditional.Text = "is null";
}