Нужно перебирать строки таблицы SQL, по одной за раз (таблица слишком большая, чтобы использовать адаптер. Заполнить) - PullRequest
6 голосов
/ 10 марта 2010

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

Ответы [ 2 ]

14 голосов
/ 10 марта 2010

Вы должны использовать 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();
    }
}
8 голосов
/ 10 марта 2010

Просто используйте SqlDataReader .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...