Ошибка чтения данных при преобразовании строки в 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));
}
Другие вопросы по тегам