首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用.NET在SQLReader中实现分片读取查询结果

如何使用.NET在SQLReader中实现分片读取查询结果
EN

Stack Overflow用户
提问于 2017-03-02 15:27:46
回答 2查看 107关注 0票数 1
代码语言:javascript
复制
connection.Open();
var cmd = new SqlCommand("SELECT TOP 1000 [Id] ,[Name]  FROM [SomeBase]", connection); //Here
context.MaxID = 100;
int en = 5; //Maximum number of rows in the slice
int iter = 0; //Iterator for each single row in the slice
try
{
    SqlDataReader reader = cmd.ExecuteReader();
    if(reader.HasRows)
    {
        while (iter < en) //I need 1-5 rows in first iteration, 6-10 in second...
        {
            iter++;
            reader.Read();
            context.TextLog += String.Format("{0}\t{1}\n",
            reader.GetInt64(0), 
            reader.GetString(1));
        }
    }
    reader.Close();
}

我正在尝试从结果中按切片获取行。我期望:首先是5,然后退出脚本。下一个开始将是第二个五个结果(6-10)等。我如何管理它,例如使用MaxID或某种迭代器。

EN

回答 2

Stack Overflow用户

发布于 2017-03-02 15:38:39

你不能,因为阅读器需要一个开放的和可用的集合来从中获取值。如果每次都要一次又一次地执行查询,这并不是一种更好的做法,您可以使用DataTables来满足这一要求。为此,您可以使用以下方法:

代码语言:javascript
复制
// populate the DataTable using adapter
 SqlDataAdapter adapter = new SqlDataAdapter();
 adapter.SelectCommand = new SqlCommand("SELECT TOP 1000 [Id] ,[Name]  FROM [SomeBase]", connection);
 adapter.Fill(dataset);
// Call the method whenever you need Slice
// Which will give you a List<DataRow>
public List<DataRow> GetMySlice(DataTable inputDataTable, int minSlice, int maxSlice)
{
    return inputDataTable.AsEnumerable()
                         .Skip(minSlice)
                         .Take(maxSlice)
                         .ToList();
}

如果需要DataTable形式的结果,则可以使用.CopyToDataTable()代替.ToList()在这种情况下,方法的返回类型将是DataTable代替List<DataRow>

票数 0
EN

Stack Overflow用户

发布于 2017-03-02 16:29:28

如果您仍然需要分页并使用MS Server,您可以添加到查询SELECT子句, ROW_NUMBER() OVER (ORDER BY <ColumnName>)中,并用SELECT *包装它。然后使用带参数的WHERE子句。

代码语言:javascript
复制
SELECT * FROM 
(
    SELECT [Id] ,[Name], ROW_NUMBER() OVER (ORDER BY <ColumnName>) AS RNUM FROM [SomeBase]
) AS T
WHERE (T.RNUM BETWEEN @from AND @to)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42549205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档