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,如广告副总裁、人力资源代表等。只需在组合框中添加广告压力即可