OleDbDataReader Excel 数据到 C#

OleDbDataReader Excel data to C#

我想从 Excel table 中读取数据。目前,我 select 所有数据,然后 select 我需要的部分。我想知道这是否是一个好方法,因为数据文件中将有大约 1000 个零件号。如果有一种 better/more 有效的方法,那会是什么?我尝试直接 select 从 Excel table 中输入正确的列,但我得到了错误的输出或错误 System.IndexOutOfRangeException。在底部,有我想要的代码,以防我当前的方法不好。

Excel table:

代码:

using (OleDbConnection connection = new OleDbConnection(strConn))
{
    connection.Open();
    OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", connection);

    string partnumber = "Part1"; // this value will change depending on the operator's choice.

    using (OleDbDataReader rdr = cmd.ExecuteReader())
    {
        while (rdr.Read())
        {
            Debug.WriteLine(rdr[partnumber].ToString());
        }
    }           

}

输出:

1 2个 3个 4个 5个 6个 7 8个 9 10

我想要这样的东西:(这行不通)

using (OleDbConnection connection = new OleDbConnection(strConn))
{
    connection.Open();
    OleDbCommand cmd = new OleDbCommand("SELECT [@partNumber] FROM [Sheet1$]", connection);

    string partnumber = "Part1";

    cmd.Parameters.AddWithValue("@partNumber", partnumber);

    using (OleDbDataReader rdr = cmd.ExecuteReader())
    {
        while (rdr.Read())
        {
            Debug.WriteLine(rdr[xxx].ToString());
        }
    }           

}

如果你有列名,需要列数据,可以修改你的代码如下:

string columnName = "335610";
OleDbCommand cmd = new OleDbCommand($"SELECT [{columnName}] FROM [Sheet1$]", connection);

using (OleDbDataReader rdr = cmd.ExecuteReader())
{
    while (rdr.Read())
    {
        Debug.WriteLine(rdr.GetValue(0).ToString());
    }
}