Ошибка чтения данных при преобразовании строки в int
Я получаю ошибку во время компиляции в reader.GetString
есть идеи почему?
Код:
using (var connection = new OleDbConnection())
{
connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Sparrow vivek\Documents\Billing.accdb";
connection.Open();
var query = "SELECT ItemCode FROM invoice";
using (var command = new OleDbCommand(query, connection))
{
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
comboBox1.Items.Add(reader.GetString("ItemCode"));
comboBox2.Items.Add(reader.GetString("ItemCode"));
}
}
}
}
2 ответа
Решение
OleDbDataReader.GetString
требует ввода int
, Ожидается порядковый номер столбца, а не имя столбца.
Либо используйте порядковый номер столбца напрямую, либо определите порядковый номер заранее. Вы можете определить порядковый номер столбца с помощью OleDbDataReader.GetOrdinal
:
comboBox1.Items.Add(reader.GetString(reader.GetOrdinal("ItemCode")));
Поскольку вы делаете это в цикле, вы можете сделать что-то вроде этого:
int itemCodeOrdinal = reader.GetOrdinal("ItemCode");
while (reader.Read())
{
comboBox1.Items.Add(reader.GetString(itemCodeOrdinal));
comboBox2.Items.Add(reader.GetString(itemCodeOrdinal));
}
OleDbDataReader.GetString
метод занимает int
в качестве параметра, а не string
,
public override string GetString(
int i
)
Требуется номер столбца, начинающийся с нуля.
Поскольку вы получаете только один столбец, измените его на;
while (reader.Read())
{
comboBox1.Items.Add(reader.GetString(0));
comboBox2.Items.Add(reader.GetString(0));
}