OleDbDataReader将Excel数据转换为C#

时间:2017-08-08 07:33:27

标签: c# excel oledbdatareader

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

Excel表:

enter image description here

代码:

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 五 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());
        }
    }           

}

1 个答案:

答案 0 :(得分:0)

如果您有列名并且需要列数据,则可以按如下方式修改代码:

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());
    }
}