加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 需要一次一个地遍历SQL表行(表太大而无法使用adapter.Fill

发布时间:2020-12-15 18:30:43 所属栏目:百科 来源:网络整理
导读:我很容易通过这样的小型SQL Server 2005表进行读取: string cmdText = "select * from myTable";SqlDataAdapter adapter = new SqlDataAdapter(cmdText,connection);DataTable table = new DataTable();adapter.Fill(table); 不幸的是,这种方法似乎将整个表
我很容易通过这样的小型SQL Server 2005表进行读取:
string cmdText = "select * from myTable";
SqlDataAdapter adapter = new SqlDataAdapter(cmdText,connection);
DataTable table = new DataTable();
adapter.Fill(table);

不幸的是,这种方法似乎将整个表加载到内存中,这根本不适用于我正在使用的巨大表.

我希望能够一次一行地遍历表,这样一次只需要一行存储在内存中.有点像:

foreach (DataRow row in rowIteratorObject)
{
  // do something using the row

  // current row goes out of scope and is no longer in memory
}

类似于您可以使用StreamReader一次处理一行文本文件的方式,而不是一次性读取所有文本文件.有没有人知道用表格行来做这个的方法(或者,如果我咆哮错误的树,另一种解决方案)?

解决方法

您应该使用DataReader:
using( var connection = new SqlConnection( "my connection string" ) ) {
    using( var command = connection.CreateCommand() ) {
        command.CommandText = "SELECT Column1,Column2,Column3 FROM myTable";

        connection.Open();
        using( var reader = command.ExecuteReader() ) {
            var indexOfColumn1 = reader.GetOrdinal( "Column1" );
            var indexOfColumn2 = reader.GetOrdinal( "Column2" );
            var indexOfColumn3 = reader.GetOrdinal( "Column3" );

            while( reader.Read() ) {
                var value1 = reader.GetValue( indexOfColumn1 );
                var value2 = reader.GetValue( indexOfColumn2 );
                var value3 = reader.GetValue( indexOfColumn3 );

                // now,do something what you want
            }
        }
        connection.Close();
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读