由于C#中对象的当前状态,操作无效

时间:2016-06-13 11:49:54

标签: c# oracle oracle10g odp.net

我的编码有问题。这是我编写此程序的源代码。

    OracleConnection kon;
    public Form2()
    {
        InitializeComponent();
        FillCombo();
    }

    void FillCombo()
    {
        OracleConnection kon = Koneksi.getKoneksi();
        OracleCommand cmd;
        try
        {
            kon.Open();
            cmd = new OracleCommand();
            cmd.Connection = kon;

            cmd.CommandText = "SELECT * FROM JOBS";

            OracleDataReader reader = cmd.ExecuteReader();
            comboBox1.Items.Add(reader.GetString(reader.GetOrdinal("JOB_ID")));
        }
        catch (Exception ex)
        {
            MessageBox.Show("Data has been failed to show: " + ex.Message);
        }
        finally
        {
            kon.Close();
            kon.Dispose();
        }
    }
 }

}

当我运行该程序时,系统将显示对话框"由于对象的当前状态"操作无效。

When I running the Program

There's No Error

如何解决此错误?我将数据绑定到数据库中的comboBox。我的意思是,我想添加 JOB_ID到组合框,例如AD_VP,HR_REP等等。

顺便说一句,如果我的英语很差,我很抱歉。

2 个答案:

答案 0 :(得分:0)

缺少的一个显而易见的事情是,在尝试从数据读取器读取之前,您没有调用reader.Read()。当您致电OracleDataReader reader = cmd.ExecuteReader();时,数据阅读器会在第一条记录 之前 。您需要致电reader.Read()将其移至第一条记录。这可以很容易地解释你得到的错误。

OracleDataReader reader = cmd.ExecuteReader();
reader.Read(); // Add this. Check for a return value of false if necessary.
comboBox1.Items.Add(reader.GetString(reader.GetOrdinal("JOB_ID")));

除此之外,妥善处理数据阅读器也是一个好主意。您可能希望使用using块。

答案 1 :(得分:-2)

所以你要做的是将JOB_ID列的ordial编号添加到组合框中。你可能知道int中的GetOrdinal返回。 为什么不这样做:

...   
comboBox1.Items.Add(Convert.ToString(reader.GetOrdinal("JOB_ID")));
...