由于 C# 中对象的当前状态,操作无效
operation is not valid due to the current state of the object in C#
我的编码有问题。这是我为这个程序编写的源代码。
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();
}
}
}
}
当我运行这个程序时,系统会显示对话框"operation is not valid due to the current state of the object"。
如何解决这个错误?我会将数据从数据库绑定到组合框。我的意思是,我想 添加 JOB_ID 到组合框,例如 AD_VP、HR_REP,顺便说一句。
顺便说一句,如果我的英语不好,我很抱歉。
所以您要做的是将 JOB_ID 列的序号添加到组合框。您可能知道 GetOrdinal returns in int。
你为什么不这样走:
...
comboBox1.Items.Add(Convert.ToString(reader.GetOrdinal("JOB_ID")));
...
一件明显缺失的事情是您在尝试读取数据 reader 之前没有调用 reader.Read()
。当您调用 OracleDataReader reader = cmd.ExecuteReader();
时,那一刻,数据 reader 位于 之前 第一条记录。您需要调用 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")));
除此之外,妥善处理数据 reader 也是一个好主意。您可能需要为此使用 using
块。
我的编码有问题。这是我为这个程序编写的源代码。
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();
}
}
}
}
当我运行这个程序时,系统会显示对话框"operation is not valid due to the current state of the object"。
如何解决这个错误?我会将数据从数据库绑定到组合框。我的意思是,我想 添加 JOB_ID 到组合框,例如 AD_VP、HR_REP,顺便说一句。
顺便说一句,如果我的英语不好,我很抱歉。
所以您要做的是将 JOB_ID 列的序号添加到组合框。您可能知道 GetOrdinal returns in int。 你为什么不这样走:
...
comboBox1.Items.Add(Convert.ToString(reader.GetOrdinal("JOB_ID")));
...
一件明显缺失的事情是您在尝试读取数据 reader 之前没有调用 reader.Read()
。当您调用 OracleDataReader reader = cmd.ExecuteReader();
时,那一刻,数据 reader 位于 之前 第一条记录。您需要调用 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")));
除此之外,妥善处理数据 reader 也是一个好主意。您可能需要为此使用 using
块。