我希望我的列表框在visual studio中列出我的课程表中的课程(来自数据库) 应用程序运行正常,但listBox保持为空,这是我使用的代码:
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string sqlcon = "Data Source = localhost; Persist Security Info = True; User ID = localhost; Password = ****; Unicode = True";
OracleConnection con = new OracleConnection(sqlcon);
con.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = con;
cmd.CommandText = "select coursename from course";
cmd.CommandType = CommandType.Text;
OracleDataReader dr = cmd.ExecuteReader();
dr.Read();
while(dr.Read())
{
ListBox1.Items.Add(dr.GetString(1));
}
}
答案 0 :(得分:0)
代码中存在三个错误和一些逻辑问题。
错误优先:
你调用GetString(1),但你从中检索了coursename table,这将为索引超出范围提供异常。数组 从索引零开始,以获得你需要的coursename GetString(0)
// Not needed, let the loop run
// dr.Read();
while(dr.Read())
{
// The first column is at index zero
ListBox1.Items.Add(dr.GetString(0));
}
最后是逻辑问题。您似乎使用SelectedIndexChanged事件来填充触发SelectedIndexChanged的同一列表中的项目。这似乎是不合逻辑的,因为您已经在该列表中有项目,并选择一个触发该事件。这段代码应该在其他地方运行(Load事件?)你在这里想做什么?无论如何,如果你真的想保留这些代码,那么你应该至少在从数据库加载项目之前清除Items集合,否则,在每个SelectedIndexChanged中你添加另一组与已经加载的项目相同的项目。
// Before filling the items clear the previous ones
listBox1.Items.Clear();