Domanda

Come posso controllare per un valore NULL in un MySqlDataReader aperta?

Di seguito non funziona; è sempre colpire il else:

if (rdr.GetString("timeOut") == null)
{
    queryResult.Egresstime = "Logged in";
}
else
{
    queryResult.Egresstime = rdr.GetString("timeOut");
}

rdr.IsDbNull(int i) accetta solo un numero di colonna, non il nome.

È stato utile?

Soluzione

var ordinal = rdr.GetOrdinal("timeOut");
if(rdr.IsDBNull(ordinal)) {
  queryResult.Egresstime = "Logged in";
} else {
  queryResult.Egresstime = rdr.GetString(ordinal);
}//if

o

if(Convert.IsDBNull(rdr["timeOut"])) {
  queryResult.Egresstime = "Logged in";
} else {
  queryResult.Egresstime = rdr.GetString("timeOut");
}//if

Altri suggerimenti

if (rdr.GetString ( "timeout") == DBNull.Value)

null non è lo stesso di DBNull

Mi dispiace, risposta sbagliata, Sam B è giusto. Ho scambiato questo per roba DataRow.

SqlDataReader ha fortemente tipizzato GetString() e fornisce IsDBNull(int column) per questo caso.

Devi chiamare rdr.IsDBNull(column) per determinare se il valore è DbNull.

È possibile confrontare l'oggetto che recuperare dal campo NULL con DBNull .Value .

Cambia null a DBNull.Value.

È anche possibile fare:

If (string.IsNullOrEmpty(rdr.GetString("timeOut"))

Ecco quello che mi piace:

var MyString = rdr["column"] is DBNull ? "It's null!" : rdr.GetString("column");

es (per il requisito originale):.

queryResult.Egresstime = rdr["timeOut"] is DBNull ? "Logged in" : rdr.GetString("timeOut");

Ecco un metodo che ho creato per leggere DBNull e restituire un incassa default(T):

   private T GetNullable<T>(MySqlDataReader reader, int ordinal, Func<int, T> getValue)
        {
            if (reader.IsDBNull(ordinal))
            {
                return default(T);
            }
            return getValue(ordinal);
        }

Può essere utilizzato in questo modo:

   if (reader.Read())
            {
                account = new Account();
                account.Id = reader.GetInt32(0);
                account.Name = reader.GetString(1);
                account.MailVerifiedAt = GetNullable(reader, 2, reader.GetDateTime);
                account.MailToken = GetNullable(reader, 3, reader.GetString);
            }

Il tipo T generico sarà risolto sulla base del valore di ritorno del metodo reader.-. Se si restituisce una stringa si riceverà una in caso di null DBNull. Se è un int esso tornerà 0, ecc.

. Nota: per i valori interi non potrebbe desiderare di ottenere una 0 quindi state attenti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top