【问题标题】:How to limit the number of rows in dataset如何限制数据集中的行数
【发布时间】:2026-01-25 20:20:06
【问题描述】:

参考代码

 [WebMethod]

 public static string GetData()
 {
      string query = "SELECT * FROM tblCountry";
      SqlCommand cmd = new SqlCommand(query);
      return GetData(cmd).GetXml();
 }
 private static DataSet GetData(SqlCommand cmd)
 {
      string strConnString = @"Data Source=.\sqlExpress;Initial Catalog=dbTest;Integrated  Security=SSPI; pooling=false";
      using (SqlConnection con = new SqlConnection(strConnString))
      {
          using (SqlDataAdapter sda = new SqlDataAdapter())
          {
             cmd.Connection = con;
             sda.SelectCommand = cmd;
             using (DataSet ds = new DataSet())
             {
                sda.Fill(ds);
                return ds;
             }
          }
      }
 } 

查看更多信息:Link

查询返回 20 行,我需要单独显示 10 行。如果不更改查询,是否有可能限制数据集中的数据。建议一些想法

【问题讨论】:

  • 与其使用sda.Fill...,不如在(有限的)循环中使用DataReader
  • 或 SELECT TOP(10) * FROM tblCountry ORDER BY ... 某事
  • @Devcon2 他在询问没有改变查询..
  • 你为什么不想改变查询??
  • 有时您可能希望在不更改查询的情况下限制返回的记录,因为您无法控制查询。您可能希望让您的用户运行查询,但您不想带回大量数据。这就是我想做同样事情的确切原因。

标签: c# asp.net dataset sqldataadapter


【解决方案1】:

你可以试试这个

var rows = ds.Tables[0].AsEnumerable().Take(10);

现在您还可以将这些行转换成这样的数据表

DataTable limitedTable = rows.CopyToDataTable<DataRow>();

【讨论】:

  • 正要发布这个答案。请记住为 System.Data.DataSetExtensions 添加对您项目的引用,否则这将不起作用。
【解决方案2】:

您可以使用Fill 的重载来获取开始和结束记录索引。

var ds = new DataSet; //using means the DataSet will go out of scope so you can't return it!
sda.Fill(1, 10, ds.Tables.Add("MyTable"));
return ds; //it now contains a table called "MyTable".

您可以找到更多详情here

但是像这里的大多数评论者一样,我更倾向于修改查询如果可能的话

【讨论】:

    【解决方案3】:

    您对不更改查询的要求有多严格?您可以在查询前添加一些文本吗?

    如果是这样,您可以使用SET ROWCOUNT

    例子:

    string query = "SET ROWCOUNT 10;"
    query += "SELECT * FROM tblCountry";
    

    【讨论】:

      【解决方案4】:
      string query = "SELECT TOP 10 FROM tblCountry";
      

      您可以进行这样的查询,只返回 10 行。

      【讨论】: