OleDbDataReader Excel данные на C#

Я хотел бы прочитать данные из таблицы Excel. На данный момент я выбираю все данные, а затем выбираю ту часть, которая мне нужна. Мне интересно, если это хороший подход, учитывая, что в файле данных будет около 1000 номеров деталей. Если есть лучший / более эффективный способ, что бы это было? Я попытался напрямую выбрать правильный столбец из таблицы Excel, но я получил неправильный вывод или ошибку System.IndexOutOfRangeException, Внизу есть код, который я хотел бы иметь на случай, если мой текущий метод не годится.

Таблица Excel:

введите описание изображения здесь

Код:

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

}

1 ответ

Решение

Если у вас есть имя столбца и вам нужны данные столбца, вы можете изменить свой код следующим образом:

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());
    }
}
Другие вопросы по тегам