我的编码有问题。这是我编写此程序的源代码。
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。我的意思是,我想添加 JOB_ID到组合框,例如AD_VP,HR_REP等等。
顺便说一句,如果我的英语很差,我很抱歉。
答案 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")));
...