Потребность выполнить итерации через строки таблицы SQL, по одному (таблица, слишком большая для использования адаптера. Заливка)

Для меня достаточно легко прочитать маленькую таблицу 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 для контакта с текстовым файлом одной строки за один раз, вместо того, чтобы читать все это в сразу. Кто-либо знает о способе сделать это со строками таблицы (или, если я рявкаю неправильное дерево, альтернативное решение)?

6
задан Brian Tompsett - 汤莱恩 18 April 2017 в 20:43
поделиться

2 ответа

Вы должны использовать 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();
    }
}
14
ответ дан 8 December 2019 в 05:54
поделиться

Просто используйте вместо него SqlDataReader .

8
ответ дан 8 December 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: