58 votes

Comment vérifier si un datareader est nul ou vide ?

J'ai un datareader qui renvoie une liste d'enregistrements d'une base de données sql server. J'ai un champ dans la base de données appelé "Additional". Ce champ est 50% du temps vide ou nul.

J'essaie d'écrire un code qui vérifie si ce champ est nul. La logique derrière cela est la suivante : Si le champ "Additional" contient du texte, il faut afficher l'information, sinon il faut cacher 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 : System.IndexOutOfRangeException : Supplémentaire

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


Voir aussi :

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

2voto

Joe Philllips Points 13616

Tout d'abord, vous voudrez probablement vérifier si un DBNull pas un habitué Null .

Ou vous pouvez regarder le IsDBNull método

1voto

Shiva Points 4745

@Joe Philllips

SQlDataReader.IsDBNull(int index) requiert le numéro ordinal de la colonne. Existe-t-il un moyen de vérifier les nuls en utilisant le nom de la colonne, et non son numéro ordinal ?

1voto

cnom Points 798

Essayez cette syntaxe équivalente plus simple :

ltlAdditional.Text = (myReader["Additional"] == DBNull.Value) ? "is null" : "contains data";

1voto

Kirtan Points 11022

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.

0voto

Rob Points 155

Je rencontre également ce genre de problème, mais le mien est que j'utilise DbDataReader comme lecteur générique (pour SQL, Oracle, OleDb, etc.). Si j'utilise DataTable, DataTable a cette méthode :

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

En utilisant cela, je peux déterminer si cette colonne existe dans le jeu de résultats de ma requête. Je cherche également à savoir si DbDataReader a cette capacité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X