如何限制数据集中的行数

Posted

技术标签:

【中文标题】如何限制数据集中的行数【英文标题】:How to limit the number of rows in dataset 【发布时间】:2014-01-31 09:55:42 【问题描述】:

参考代码

 [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 他在询问没有改变查询.. 你为什么不想改变查询?? 有时您可能希望在不更改查询的情况下限制返回的记录,因为您无法控制查询。您可能希望让您的用户运行查询,但您不想带回大量数据。这就是我想做同样事情的确切原因。 【参考方案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 行。

【讨论】:

以上是关于如何限制数据集中的行数的主要内容,如果未能解决你的问题,请参考以下文章

获取 Java 结果集中的行数

是否有使用Pandas限制数据透视表的行数的功能?

如何在 JDBC 数据源级别限制从 Oracle 返回的行数?

限制结果集行数

dplyr transmute 返回的行数少于原始数据帧

如何限制 BigQuery 获取的行数?