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

Posted

技术标签:

【中文标题】在 SQL 表行中迭代的最佳方法 - C#【英文标题】:Best way to iterate in SQL table rows - C# 【发布时间】:2014-11-13 06:29:12 【问题描述】:

我想根据身份列字段从 sql server 表中一一获取每条记录 C# 中的单独方法调用。我想迭代超过 50000 行。

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

什么是最好的方法来做到这一点,而不是保持一个单一的数据阅读器连接贯穿整个时间?

请帮忙。

【问题讨论】:

你不清楚举个例子你想做什么? 您是尝试在后端本身执行循环结果集,还是尝试通过数据表或 Dto 在前端执行? 如果 SQL Server 中的每一行都必须执行一些 C# 逻辑,并且每一行都独立于 SQL Server 中的其他行,则一次将所有行获取到您的 C# 代码(如 DataSet.Load),然后为每一行处理而不是为每次迭代保持连接打开 【参考方案1】:

你考虑过使用

`foreach (DataRow dr in Table_Name.Rows)`

variable1 = dr["Column1_Name"];
variable2 = dr["Column2_Name"];

【讨论】:

【参考方案2】:

你可以做这样的事情。 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

【讨论】:

以上是关于在 SQL 表行中迭代的最佳方法 - C#的主要内容,如果未能解决你的问题,请参考以下文章

迭代 Pandas 数据框的最佳方法?

迭代 Android 光标的最佳方法是啥?

迭代返回模型的最佳方法

迭代列表时更改列表的最佳方法[重复]

迭代熊猫系列元素的最佳方法

迭代列表并从中删除项目的最佳方法? [关闭]