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