【问题标题】:How to test if a DataSet is empty?如何测试 DataSet 是否为空?
【发布时间】:2011-02-27 22:07:00
【问题描述】:

我正在修改其他人的代码,其中使用以下内容执行查询:

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

如何判断 DataSet 是否为空(即没有返回结果)?

【问题讨论】:

    标签: c# ado.net dataset


    【解决方案1】:

    您不必测试数据集。

    Fill() 方法返回添加的行数。

    DbDataAdapter.Fill Method (DataSet)

    【讨论】:

    • 希望我可以使用它,但填充数据集的代码是返回填充数据集的方法的一部分。我正在编写的代码调用这样的方法 DataSet ds = GetResults(sql, conn)。
    • 循环遍历表并计算行数肯定会起作用,但请查看 DataSet 的 ExtendedProperties 属性,它允许您从 GetResults() 中设置此类自定义信息并在返回时使用它。在这里可能不适用,但将来可能会适用。
    • Fill() 实际上只返回数据集中第一个表的行数。如果 DataSet 中有多个表,它不会返回实际的总行数。
    • Tom - 我也注意到该属性,目前正在使用它来返回行数(注意我的数据集中只有一个表): ds.Tables["TableNameAssignedInFillMethodHere"].ExtendedProperties.Count;
    【解决方案2】:

    如果我理解正确,这应该对你有用

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

    【讨论】:

    • 我想如果查询使用多个表,这将无法正常工作。
    • ds.Tables.Count 怎么样?
    • 这不是一个正确的答案,因为它会给出错误。找不到表 0。
    • 这并不总是有效。我只是尝试过同样的方法,但在我的情况下,我收到“无法找到表 [0]!”。然后我发现如果我的查询没有返回空结果集,而是返回错误,上述方法将不起作用。相反,简单但更简单的方法是使用检查 ds.Tables.Count 条件。它很简单,适用于所有场景。
    • 您可以检查(ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0),这样满足的第一个条件将防止出现错误。
    【解决方案3】:

    您应该遍历所有表并测试 table.Rows.Count 是否为 0

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

    更新:由于 DataTable 可能包含已删除的行 RowState = Deleted,这取决于您想要实现的目标,最好检查 DefaultView(不包含已删除的行)。

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

    【讨论】:

      【解决方案4】:

      此代码将显示如下错误 Table[0] can not be found! 因为位置 0 不会有任何表格。

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

      【讨论】:

        【解决方案5】:
        If (ds != null)
        

        应该为你做这项工作!

        【讨论】:

          【解决方案6】:

          这不是一个有效的答案,因为它给出了以下错误

          找不到表 0。

          改用下面的语句

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

          【讨论】:

            【解决方案7】:
             MySqlDataAdapter adap = new MySqlDataAdapter(cmd);
             DataSet ds = new DataSet();
             adap.Fill(ds);
             if (ds.Tables[0].Rows.Count == 0)
             {
                  MessageBox.Show("No result found");
             }
            

            查询将接收数据集中的数据,然后我们将检查数据集是空的还是其中有一些数据。为此我们做 ds.tables[0].Rows.Count == o 这将计算数据集中的行数。如果上述条件为真,则数据集即 ds 为空。

            【讨论】:

            • 答案在它是否接收到该行的数据集中。只需检查它的行数是否为零。
            【解决方案8】:

            我们总共可以检查三种方式。

            1. if(ds != null)
            2. if(ds.Tables.Count &gt; 0 )
            3. if(ds.Tables[0].Rows.Count &gt; 0)

            【讨论】:

            • 进行所有三项检查可能是安全的。第三条语句应该是 ds.Tables[0].Rows.Count > 0
            • 第三个(ds.Tables[0].Rows.Count > 0)抛出以下错误:找不到表0。
            【解决方案9】:

            别忘了设置表名 da.Fill(ds,"tablename");

            所以你使用表名而不是 0 返回数据

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

            【讨论】:

              【解决方案10】:

              当从 SQL 查询返回结果时,我发现表 [0] 存在,但它有零行。所以在我的情况下这有效:

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

              这不起作用:

              如果(ds.Tables.Count == 0)

              【讨论】:

                【解决方案11】:

                要检查数据集是否为空,您必须检查 null 和表数。

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

                【讨论】:

                  【解决方案12】:

                  Fill is 命令总是返回插入数据集中的记录数。

                  DataSet ds = new DataSet();
                  SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn);
                  var count = da.Fill(ds);
                  if(count > 0)
                  {
                     Console.Write("It is not Empty");
                  }
                  

                  【讨论】:

                    【解决方案13】:

                    这应该可行

                    DataSet ds = new DataSet();
                    SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn);
                    da.Fill(ds);
                    
                    if(ds.Tables.Count > 0)
                    {
                      // enter code here
                    }
                    

                    【讨论】:

                      【解决方案14】:

                      你可以使用这样的东西

                      if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                      {
                         //Code 
                      }
                      

                      【讨论】:

                        【解决方案15】:

                        更好的方法是使用以下方法:

                        ds.Tables.Count == 0

                        作为 ds.Tables[0].Rows.Count == 0

                        可以报错:

                        System.IndexOutOfRangeException: '找不到表 0。'

                        【讨论】:

                          猜你喜欢
                          • 2011-09-17
                          • 1970-01-01
                          • 2019-03-22
                          • 2011-11-26
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多