C# 使用数据读取器处理excel文件:ExecuteReader()缓冲整个文件
我在尝试使用数据读取器处理大型excel文件(300mb+)时遇到了一个特殊的问题。 下面的代码演示了如何打开excel文件并遍历工作表“largesheet$”中的行:C# 使用数据读取器处理excel文件:ExecuteReader()缓冲整个文件,c#,excel,datareader,C#,Excel,Datareader,我在尝试使用数据读取器处理大型excel文件(300mb+)时遇到了一个特殊的问题。 下面的代码演示了如何打开excel文件并遍历工作表“largesheet$”中的行: const string inputFilePath = @"C:\largefile.xlsx"; const string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=\"Excel 12.0;IMEX=1;HD
const string inputFilePath = @"C:\largefile.xlsx";
const string connectionString =
"Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=\"Excel 12.0;IMEX=1;HDR=YES;\";Data Source=" +
inputFilePath;
// Initialize connection
using (var connection = new OleDbConnection(connectionString))
{
// Open connection
connection.Open();
// Configure command
var command = new OleDbCommand("largesheet$", connection) {CommandType = CommandType.TableDirect};
// Execute reader
var reader = command.ExecuteReader(); // <-- Completely loads file/sheet into memory
// Iterate results
while (reader.HasRows)
{
// Read single row
reader.Read();
// ...
}
// Close connection
connection.Close();
}
const string inputFilePath=@“C:\largefile.xlsx”;
常量字符串连接字符串=
“Provider=Microsoft.ACE.OLEDB.12.0;扩展属性=\”Excel 12.0;IMEX=1;HDR=是\“数据源=”+
输入文件路径;
//初始化连接
使用(var连接=新的OLEDB连接(connectionString))
{
//开放连接
connection.Open();
//配置命令
var command=new-OleDbCommand(“largesheet$”,connection){CommandType=CommandType.TableDirect};
//执行读取器
var reader=command.ExecuteReader();//From:“调用命令对象的某个Execute方法时,将返回命名表的所有行和列。”(在备注部分下)。因此这似乎是ExecuteReader()的默认行为
可能会为您提供更多选项,特别是当CommandBehavior设置为时,尽管您需要在字节级别处理读取。正如我在问题中所述,SequentialAccess的使用没有任何区别(我只是结合TableDirect尝试过)。我发现ExecuteReader将数据加载到内存中很奇怪,我认为数据读取器的优势之一是其灵活性和性能。.NET framework是否提供了更适合处理大型数据文件的替代方案?您是否考虑过使用OpenXML()对于您的任务?这可能会给您更多的控制,这取决于加载数据后您需要对数据执行什么操作。您可以使用SDK提供的类似SAX的读取来控制文件的读取方式。