web-dev-qa-db-fra.com

Comment vérifier DataTable vide

J'ai un DataSet où j'ai besoin de savoir combien de lignes ont été modifiées à l'aide du code suivant:

dataTable1 = dataSet1.Tables["FooTable"].GetChanges();

foreach (DataRow dr in dataTable1)
{
  // ...
}

DataSet a DataSet.HasRow mais DataTable n’a pas cette méthode. S'il n'y a pas de lignes modifiées. modifiedDT1 sera une valeur nulle, ce qui fera que la boucle lèvera une exception.

Comment vérifier si DataTable est vide? J'ai essayé Rows.Count - ne fonctionne pas ...

38
KMC

Si 'dataTable1' est null, ce n'est pas un datatable. Enroulez simplement votre foreach dans une instruction if qui vérifie si 'dataTable1' est null:

if (dataTable1 != null)
{
   foreach (DataRow dr in dataTable1)
   {
      // ...
   }
}
40
Ben Robinson

Tout d’abord, assurez-vous que DataTable n’est pas nul et vérifiez le nombre de lignes.

if(dt!=null)
{
  if(dt.Rows.Count>0)
  {
    //do your code 
  }
}
53
Pranay Rana

Normalement, lorsque vous interrogez une base de données avec SQL et que vous remplissez ensuite une table de données avec ses résultats, il ne sera jamais une table de données nulle. Vous avez les en-têtes de colonne remplis avec les informations de colonne même si vous avez renvoyé 0 enregistrements. Lorsqu'un utilisateur a essayé de traiter une table de données avec 0 enregistrement mais avec des informations de colonne, une exception sera émise.

if (DetailTable != null && DetailTable.Rows.Count>0)
13
C.Poh

N'utilisez pas rows.Count. Cela demande combien de lignes existent. S'il y en a beaucoup, il faudra du temps pour les compter. Tout ce que vous voulez vraiment savoir, c'est "y a-t-il au moins un?" Peu importe qu'il y en ait 10, 1 000 ou un milliard. Vous voulez juste savoir s'il y en a au moins un. Si je vous donne une boîte et vous demande s'il y a des billes, est-ce que vous allez vider la boîte sur la table et commencer à compter? Bien sûr que non. En utilisant LINQ, vous pourriez penser que cela fonctionnerait:

bool hasRows = dataTable1.Rows.Any()

Mais malheureusement, DataRowCollection n'implémente pas IEnumerable. Alors essayez plutôt ceci:

bool hasRows = dataTable1.Rows.GetEnumerator().MoveNext()

Vous devrez bien sûr vérifier si le dataTable1 est d’abord nul. si ce n'est pas le cas, cela vous indiquera s'il y a des lignes sans énumérer le tout.

11
JoeM

À partir de MSDN pour GetChanges

Une copie filtrée du DataTable sur laquelle des actions peuvent être exécutées, puis fusionnée dans le DataTable à l'aide de Merge. Si aucune ligne du DataRowState souhaité n'est trouvée, la méthode ne renvoie rien (null) .

dataTable1 est nul, vérifiez donc avant de parcourir la liste.

4
V4Vendetta

Vous pouvez aussi simplement écrire

 if (dt.Rows.Count == 0)
     {
         //DataTable does not contain records
     }        
4
RSB

C'est une vieille question, mais comme cela pourrait aider beaucoup de codeurs c #, il existe un moyen simple de résoudre ce problème, comme suit:

if ((dataTableName?.Rows?.Count ?? 0) > 0)
1
YeinCM-Qva
Sub Check_DT_ForNull()
Debug.Print WS_FE.ListObjects.Item(1).DataBodyRange.Item(1).Value
If Not WS_FE.ListObjects.Item(1).DataBodyRange.Item(1).Value = "" Then
   Debug.Print WS_FE.ListObjects.Item(1).DataBodyRange.Rows.Count
End If
End Sub

Cela vérifie la valeur de la première ligne dans le DataBodyRange pour Null et Compter le nombre total de lignes. Cela a fonctionné pour moi car j'ai téléchargé mon serveur de données. Il n'y avait pas de données mais la table a été créée avec des blancs et Rows.Count n'était pas 0 mais des lignes vides.

1
Vanidasan