如何限制数据集中的行数
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 行。
【讨论】:
以上是关于如何限制数据集中的行数的主要内容,如果未能解决你的问题,请参考以下文章