Для меня достаточно легко прочитать маленькую таблицу 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();
}
}