我很容易通过这样的小型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一次处理一行文本文件的方式,而不是一次性读取所有文本文件。有没有人知道用表格行来做这个的方法(或者,如果我正在咆哮错误的树,另一种解决方案)?
答案 0 :(得分:14)
您应该使用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();
}
}
答案 1 :(得分:8)
只需使用SqlDataReader。