迭代SQL表行的最佳方法 - C#

时间:2014-11-13 06:29:13

标签: c# sql sql-server query-optimization

我想基于标识列字段逐个从sql server表中获取每条记录为
C#中单独的方法调用。我想迭代超过50000行。

例如:我想从SQL表中获取第一行并基于行值,需要做一些C#编码过程。然后需要获取第二行,所以。

最好的方法是什么,而不是通过时间维护单个数据读取器连接?

请帮助。

2 个答案:

答案 0 :(得分:0)

您是否考虑过使用

`foreach (DataRow dr in Table_Name.Rows)`
{
variable1 = dr["Column1_Name"];
variable2 = dr["Column2_Name"];
}

答案 1 :(得分:0)

你可以这样做。 TEntity可以是表示数据库中一行的类。

public class MyEnumerable<TEntity> : IEnumerable<TEntity> where TEntity : class, new()
{
    private Entity _lastElement;

    public IEnumerator<TEntity> GetEnumerator()
    {
        TEntity nextElement = // get next element based on _lastElement from database

        // check if a next element exists
        if (nextElement != null)
        {
            _lastElement = nextElement;
            yield return _lastElement;
        }
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }
}

但我认为这样做的表现真的很糟糕,因为对于每一行,你都有创建/打开连接的开销(应该由ADO.NET汇集)并获取查询结果。 您可以使用它:

MyEnumerable<Entity> myEnumerable = new MyEnumerable<Entity>();
foreach (var entity in myEnumerable)
{
     // do work
}