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

C# 由于C中对象的当前状态,操作无效#,c#,oracle,oracle10g,odp.net,C#,Oracle,Oracle10g,Odp.net,我的编码有问题。这是我为这个程序编写的源代码 OracleConnection kon; public Form2() { InitializeComponent(); FillCombo(); } void FillCombo() { OracleConnection kon = Koneksi.getKoneksi(); OracleCommand cmd; tr

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

    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();
        }
    }
 }
}

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

如何解决这个错误?我将数据绑定到数据库中的comboBox。我的意思是,我想在组合框中添加工作ID,例如广告副总裁、人力资源代表等


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

所以你要做的是将JOB\u ID列的原始编号添加到一个组合框中。正如您可能知道的,GetOrdinal以int形式返回。 你为什么不这样做呢:

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

一个明显的缺失是,在尝试从数据读取器读取数据之前,没有调用
reader.Read()
。当您调用
OracleDataReader=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
块。

哪一行产生错误kon.Open?或者,cmd.ExecuteReader?请显示完整的堆栈跟踪和有问题的代码行。是Windows还是web应用程序?@OP:错误列表框将显示编译错误。您得到的错误是运行时错误。2种不同类型的错误。@Kgs.AzzamNizar正如我们所说,如果它在调试模式下运行,并且您没有特意关闭运行时错误,您会看到错误所在。OP的代码正在读取
作业id
的值。建议的代码返回
作业id
的结果集索引。不一样。但无论如何,这可能与OP的实际错误无关。我尝试了您的代码,但组合框中只有“0”。我的意思是,我想在组合框中添加职务ID,如广告副总裁、人力资源代表等。只需在组合框中添加广告压力即可