web-dev-qa-db-fra.com

Comment tester si un DataSet est vide?

Je modifie le code de quelqu'un d'autre lorsqu'une requête est effectuée à l'aide de ce qui suit:

DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn);
da.Fill(ds);

Comment savoir si le DataSet est vide (aucun résultat n’a été renvoyé)?

42
MCS

Si je comprends bien, cela devrait fonctionner pour vous

if (ds.Tables[0].Rows.Count == 0)
{
    //
}
63
rosscj2533

Vous n'êtes pas obligé de tester l'ensemble de données. 

La méthode Fill() renvoie le nombre de lignes ajoutées. 

Voir Méthode DbDataAdapter.Fill (DataSet)

20
Tom

Ce n'est pas une réponse valide car cela donne l'erreur suivante

Impossible de trouver la table 0.

Utilisez plutôt l'instruction suivante

if (ds.Tables.Count == 0)
{
     //DataSet is empty
}
17
captainsac

Vous devriez parcourir toutes les tables et tester si table.Rows.Count est 0

bool IsEmpty(DataSet dataSet)
{
    foreach(DataTable table in dataSet.Tables)
        if (table.Rows.Count != 0) return false;

    return true;
}

Mise à jour: puisqu'un DataTable peut contenir des lignes supprimées RowState = Deleted, en fonction de ce que vous voulez accomplir, il peut être judicieux de vérifier la DefaultView (qui ne contient pas de lignes supprimées).

bool IsEmpty(DataSet dataSet)
{
    return !dataSet.Tables.Cast<DataTable>().Any(x => x.DefaultView.Count > 0);
}
15

Ce code affichera une erreur du type Table[0] can not be found!.__ car il n’y aura pas de table en position 0.

if (ds.Tables[0].Rows.Count == 0)
{
    //
}
1
Subhash PM

Pour vérifier si l'ensemble de données est vide ou non.

DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn);
da.Fill(ds);
if(ds != null && ds.Tables.Count > 0)
{
 // your code
}
0
Munavvar

En renvoyant les résultats d'une requête SQL, je constate que les tables [0] existent, mais qu'il n'y a aucune ligne. Donc, dans ma situation, cela a fonctionné:

if (ds.Tables [0] .Rows.Count == 0) // vide

Cela n'a pas fonctionné:

if (ds.Tables.Count == 0)

0
James Grigley

Fill sa commande retourne toujours le nombre d'enregistrements insérés dans l'ensemble de données. 

DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn);
var count = da.Fill(ds);
if(count > 0)
{
   Console.Write("It is not Empty");
}
0
Natarajan Ganapathi
 MySqlDataAdapter adap = new MySqlDataAdapter(cmd);
 DataSet ds = new DataSet();
 adap.Fill(ds);
 if (ds.Tables[0].Rows.Count == 0)
 {
      MessageBox.Show("No result found");
 }

query recevra les données dans le jeu de données, puis nous vérifierons le jeu de données vide ou contenant des données. pour cela nous faisons ds.tables [0] .Rows.Count == o Cela comptera le nombre de lignes contenues dans le jeu de données. Si la condition ci-dessus est vraie, l'ensemble de données, c.-à-d. Ds, est vide.

0
NomanJaved

N'oubliez pas de définir le nom de la table da.Fill (ds, "nomtable");

Donc, vous retournez des données en utilisant le nom de la table au lieu de 0 

if (ds.Tables["tablename"].Rows.Count == 0)
 {
  MessageBox.Show("No result found");
 }
0
Salem Ahmed