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
11 réponses
if (myReader["Additional"] != DBNull.Value)
{
ltlAdditional.Text = "contains data";
}
else
{
ltlAdditional.Text = "is null";
}
if (myReader.HasRows) //The key Word is **.HasRows**
{
ltlAdditional.Text = "Contains data";
}
else
{
ltlAdditional.Text = "Is null Or Empty";
}
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
C'est la solution correcte et éprouvée
if (myReader.Read())
{
ltlAdditional.Text = "Contains data";
}
else
{
ltlAdditional.Text = "Is null";
}
j'utilise aussi Oldbdatareader.IsDBNull ()
if ( myReader.IsDBNull(colNum) ) { retrievedValue = ""; }
else { retrievedValue = myReader.GetString(colNum); }
tout d'abord, vous voulez probablement vérifier pour un DBNull
pas un régulier Null
.
Ou vous pouvez regarder la IsDBNull
méthode
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.
@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?
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 "
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é.
Ce
exemple:
objCar.StrDescription = (objSqlDataReader["fieldDescription"].GetType() != typeof(DBNull)) ? (String)objSqlDataReader["fieldDescription"] : "";