Select 使用 OleDbCommand 的语句抛出 InvalidOperationException

Select statement using OleDbCommand throws InvalidOperationException

我需要在 C# 中查找记录,但我收到 InvalidOperationException:

public static Auto findAuto(int kfznr)
{
    Auto retAuto = new Auto();
    try
    {
        myOleDbConnection.Open();
        string query = "SELECT * FROM Auto WHERE Auto.KFZNR = " + kfznr; 
        
        OleDbCommand select = new OleDbCommand();
        select.Connection = myOleDbConnection;
        select.CommandText = query;
        OleDbDataReader reader = select.ExecuteReader();

        while (reader.Read())
        {
            Auto at = new Auto(Convert.ToInt32(reader[0]), Convert.ToString(reader[1]), Convert.ToString(reader[2]));

            retAuto = at;
        }
    }
    catch (OleDbException e)
    {

        Console.WriteLine(e.ToString());
    }

    return retAuto;
}

我在创建新 Auto 时在 while 循环中遇到错误。 当我 运行 在 SQLDeveloper 中执行相同的查询时,我得到一条记录(请看第一个屏幕截图),但在我的 C# 程序中,我的 row/cell.

没有数据

当我将鼠标悬停在 reader 上时,我得到以下图像。它说 reader 有行:

希望你能帮我解决这个问题。

您需要使用 reader.GetValue(0)

    public static Auto findAuto(int kfznr)
    {
        Auto retAuto = new Auto();
        try
        {
            myOleDbConnection.Open();
            string query = "SELECT * FROM Auto WHERE Auto.KFZNR = " + kfznr; 

            OleDbCommand select = new OleDbCommand();
            select.Connection = myOleDbConnection;
            select.CommandText = query;
            OleDbDataReader reader = select.ExecuteReader();

            while (reader.Read())
            {
                Auto at = new Auto(Convert.ToInt32(reader.GetValue(0)), Convert.ToString(reader.GetValue(1)), Convert.ToString(reader.GetValue(2)));

                retAuto = at;
            }
        }
        catch (OleDbException e)
        {

            Console.WriteLine(e.ToString());
        }

        return retAuto;
    }

还想添加...您还可以按列名访问 reader 值,也可以使用:

reader["ColumnName"]...不要忘记列名称周围的“”;)

public static Auto findAuto(int kfznr)
{
    Auto retAuto = new Auto();
    try
    {
        myOleDbConnection.Open();
        string query = "SELECT * FROM Auto WHERE Auto.KFZNR = " + kfznr; 

        OleDbCommand select = new OleDbCommand();
        select.Connection = myOleDbConnection;
        select.CommandText = query;
        OleDbDataReader reader = select.ExecuteReader();

        while (reader.Read())
        {
            Auto at = new Auto(Convert.ToInt32(reader["col1"]), Convert.ToString(reader["col2"]), Convert.ToString(reader["col3"]));

            retAuto = at;
        }
    }
    catch (OleDbException e)
    {

        Console.WriteLine(e.ToString());
    }

    return retAuto;
}