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

我很容易通过这样的小型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(); } } 

只需使用SqlDataReader即可 。