将字符串转换为int时出现Datareader错误

时间:2014-12-15 14:51:24

标签: c# oledb oledbdatareader

我在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"));
            }
        }
    }
}

enter image description here

2 个答案:

答案 0 :(得分:4)

OleDbDataReader.GetString methodint作为参数,而不是string

public override string GetString(
    int i
)

它采用从零开始的列号。

由于您只获得一列,请将其更改为;

while (reader.Read())
{
    comboBox1.Items.Add(reader.GetString(0));
    comboBox2.Items.Add(reader.GetString(0));
}

答案 1 :(得分: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));
}