ExcelDataReader-数据读取器方法部分用于什么?

问题描述 投票:0回答:1

论坛。

参考:https://github.com/ExcelDataReader/ExcelDataReader

C# code :

FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);

//1. Reading from a binary Excel file ('97-2003 format; *.xls)
IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);

//2. Reading from a OpenXml Excel file (2007 format; *.xlsx)
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);

//3. DataSet - The result of each spreadsheet will be created in the result.Tables
DataSet result = excelReader.AsDataSet();

//4. DataSet - Create column names from first row
excelReader.IsFirstRowAsColumnNames = true;
DataSet result = excelReader.AsDataSet();

//5. Data Reader methods
while (excelReader.Read())
{
    //excelReader.GetInt32(0);
}

//6. Free resources (IExcelDataReader is IDisposable)
excelReader.Close();

我的代码:

private void dataGridView1_DragDrop(object sender, DragEventArgs e)
        {
            Debug.WriteLine("OnDragDrop");
            if (validData)
            {
                try
                {
                    FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);

                    //1. Reading from a binary Excel file ('97-2003 format; *.xls)
                    IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);

                    //2. DataSet - The result of each spreadsheet will be created in the result.Tables
                    excelReader.IsFirstRowAsColumnNames = true;
                    DataSet result = excelReader.AsDataSet();

                    //3. Data Reader methods
                    while (excelReader.Read())
                    {
                        //excelReader.GetInt32(0);
                    }

                    dataGridView1.DataSource = result.Tables[0];

                    //6. Free resources (IExcelDataReader is IDisposable)
                    excelReader.Close();

                    createEmployees(result);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
        }

我的问题是,“数据读取器方法”部分的用途是什么?

我最初的想法是,它是在将数据读入DataSet之前进行转换。从单步执行代码开始,我看到DataSet结果已在步骤3/4中设置,因此没有发生数据转换或批量处理。鉴于此,我不确定excelReader.Read()代码起什么作用。

c# datareader exceldatareader
1个回答
2
投票

如果您不想使用DataSet,而是改为读取各个行/列,则可以使用此选项。

Read将阅读器的光标设置到下一行。如果结果中没有更多行,则返回false

因此Read返回true时,您可以读取当前行的各个列:

while(excelReader.Read())
{
    int i = excelReader.GetInt32(0); // 0 is the column index in your result set
    string text = excelReader.IsDbNull(1) ? string.Empty : excelReader.GetString(1);
    // etc...
}

您将需要知道结果集中的列顺序。

请参阅documentation of IDataReader接口及其IDataReader方法以获取更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.