Comment vérifier si un datareader est null ou vide

j'ai un lecteur de données qui renvoie un lsit d'enregistrements à partir d'une base de données sql server. J'ai un champ dans la base de données appelée "Autres". Ce champ est à 50% du temps vide ou null.

j'essaie d'écrire un code qui vérifie si ce champ est nul. La logique derrière ceci est: Si le champ "supplémentaire" contient du texte, alors afficher l'information sinon masquer le champ.

j'ai essayé:

if (myReader["Additional"] != null)
{
    ltlAdditional.Text = "contains data";
}
else
{
     ltlAdditional.Text = "is null";
}

le code ci-dessus me donne cette erreur:

Détails De L'Exception: Système.IndexOutOfRangeException: Additional

Toute aide serait grandement appréciée...


Voir Aussi:

Vérifier le nom de la colonne dans un objet SqlDataReader

41
demandé sur Community 2009-04-18 08:10:21

11 réponses

if (myReader["Additional"] != DBNull.Value)
{
    ltlAdditional.Text = "contains data";
}
else
{
     ltlAdditional.Text = "is null";
}
65
répondu Robert Durgin 2010-10-28 15:18:04
if (myReader.HasRows) //The key Word is **.HasRows**

{

    ltlAdditional.Text = "Contains data";

}

else

{   

    ltlAdditional.Text = "Is null Or Empty";

}
11
répondu Kemal Can ÖZÇELİK 2016-03-10 16:28:58

Je n'ai pas utilisé de DataReaders depuis plus de 3 ans, donc j'ai voulu confirmer ma mémoire et j'ai trouvé ceci. Quoi qu'il en soit, pour quiconque se produit sur ce post comme je l'ai fait et veut une méthode pour tester IsDBNull en utilisant le nom de la colonne au lieu du numéro ordinal, et vous utilisez VS 2008+ (& .NET 3.5 je pense), vous pouvez écrire une méthode d'extension afin que vous puissiez passer le nom de la colonne dans:

public static class DataReaderExtensions
{
    public static bool IsDBNull( this IDataReader dataReader, string columnName )
    {
        return dataReader[columnName] == DBNull.Value;
    }
}

Kevin

10
répondu Kevin Nelson 2010-10-20 20:39:12

C'est la solution correcte et éprouvée

if (myReader.Read())
{

    ltlAdditional.Text = "Contains data";
}
else
{   
    ltlAdditional.Text = "Is null";
}
8
répondu Ahmed Fahmy 2011-11-15 20:16:33

j'utilise aussi Oldbdatareader.IsDBNull ()

if ( myReader.IsDBNull(colNum) ) { retrievedValue = ""; }
else { retrievedValue = myReader.GetString(colNum); }
5
répondu catalyst 2011-11-27 17:58:40

tout d'abord, vous voulez probablement vérifier pour un DBNull pas un régulier Null .

Ou vous pouvez regarder la IsDBNull méthode

2
répondu Joe Phillips 2009-04-18 04:19:29

en plus des suggestions données, vous pouvez le faire directement à partir de votre requête comme ceci -

SELECT ISNULL([Additional], -1) AS [Additional]

de Cette façon, vous pouvez écrire la condition pour vérifier si la valeur du champ est < 0 ou >= 0.

1
répondu Kirtan 2009-04-18 04:22:15

@Joe Philllips

SQlDataReader.IsDBNull(int index) exige que le numéro de séquence de la colonne. Y a-t-il un moyen de vérifier les nulls en utilisant le nom de la colonne, et non son numéro Ordinal?

1
répondu Shiva 2010-06-25 22:27:05

AMG - Désolé, c'était d'avoir une blonde moment. Le champ "Additional" a été ajouté à la base de données après que j'ai initialement conçu la base de données.

j'ai mis à jour tout mon code pour utiliser ce nouveau champ, mais j'ai oublié de mettre à jour le code datareader réel qui faisait l'appel pour sélectionner les champs de la base de données, donc il n'appelait pas" supplémentaire "

0
répondu Jason 2009-04-18 04:35:34

j'éprouve aussi ce genre de problème mais le mien, J'utilise DbDataReader comme mon lecteur générique (pour SQL, Oracle, OleDb, etc.). Si vous utilisez DataTable, DataTable a cette méthode:

DataTable dt = new DataTable();
dt.Rows[0].Table.Columns.Contains("SampleColumn");

en utilisant ceci je peux déterminer si cette colonne existe dans le jeu de résultats que ma requête A. Je cherche aussi si DbDataReader a cette capacité.

0
répondu Rob 2011-10-16 03:01:33

Ce

exemple:

objCar.StrDescription = (objSqlDataReader["fieldDescription"].GetType() != typeof(DBNull)) ? (String)objSqlDataReader["fieldDescription"] : "";
0
répondu Rodrigo Medeiros da Maia 2018-02-02 13:05:28