C#和mysql有问题
我正在尝试制作一个小的桌面应用程序,使我的游戏服务器上的白名单玩家更加简单。我遇到了一些问题。这里有一些代码C#和mysql有问题,c#,mysql,datareader,C#,Mysql,Datareader,我正在尝试制作一个小的桌面应用程序,使我的游戏服务器上的白名单玩家更加简单。我遇到了一些问题。这里有一些代码 private void identityCombo_SelectedIndexChanged(object sender, EventArgs e) { if(connection.State == ConnectionState.Closed) { connection.Open(); }
private void identityCombo_SelectedIndexChanged(object sender, EventArgs e)
{
if(connection.State == ConnectionState.Closed)
{
connection.Open();
}
jobsCombo.Enabled = true;
gradesCombo.Enabled = true;
groupCombo.Enabled = true;
String query = "SELECT * FROM users WHERE identifier=@id";
MySqlCommand cmd = new MySqlCommand(query, connection);
cmd.Parameters.AddWithValue("@id", identityCombo.SelectedItem);
MySqlDataReader reader = cmd.ExecuteReader();
groupCombo.Enabled = true;
while (reader.Read())
{
steamNameBox.Text = reader["name"].ToString();
jobsCombo.SelectedIndex = jobsCombo.FindString(reader["job"].ToString());
cashBox.Text = "$" + String.Format("{0:n0}", reader["money"].ToString());
bankBox.Text = "$" + String.Format("{0:n0}", reader["bank"].ToString());
}
steamNameBox.Visible = true;
steamNameLbl.Visible = true;
cashLbl.Visible = true;
bankLbl.Visible = true;
bankBox.Visible = true;
cashBox.Visible = true;
bankLbl.Visible = true;
groupLbl.Visible = true;
groupCombo.Visible = true;
phoneNumBox.Visible = true;
phoneNumLbl.Visible = true;
esxLbl.Visible = true;
jobLbl.Visible = true;
gradesLbl.Visible = true;
jobsCombo.Visible = true;
gradesCombo.Visible = true;
updateInfoBtn.Visible = true;
}
我想做的是让我的登录系统(很好,没有问题),但它会弹出另一个菜单。在服务器上,您可以有多个标识。我有办法选择它们,而且都很好
我的问题是:
while (reader.Read())
{
steamNameBox.Text = reader["name"].ToString();
jobsCombo.SelectedIndex = jobsCombo.FindString(reader["job"].ToString());
cashBox.Text = "$" + String.Format("{0:n0}", reader["money"].ToString());
bankBox.Text = "$" + String.Format("{0:n0}", reader["bank"].ToString());
}
我正在更改“jobsCombo.SelectedIndex”,这将触发我设置的事件,该事件将根据所选作业的级别加载“作业等级”(等级)
private void jobsCombo_SelectedIndexChanged(object sender, EventArgs e)
{
loadJobGrades(jobsCombo.SelectedItem.ToString());
}
下面是界面的图片,以提供更多细节
所有信息按程序从数据库中提取,作业根据数据库中的信息自动从左侧的组合框中选择。好吧,问题是——当更改“职务”选择时,它应该填充右侧的职务等级,但事实并非如此
private void loadJobGrades(String job)
{
String query = "SELECT * FROM job_grades WHERE job_name=@job";
MySqlCommand cmd = new MySqlCommand(query, connection);
cmd.Parameters.AddWithValue("@job", job);
MySqlDataReader reader = cmd.ExecuteReader();
MessageBox.Show("1");
while (reader.Read())
{
gradesCombo.Items.Add(reader["label"]);
MessageBox.Show("2");
}
}
private void jobsCombo_SelectedIndexChanged(object sender, EventArgs e)
{
loadJobGrades(jobsCombo.SelectedItem.ToString());
}
代码的第二部分应该根据当前选择的“作业”框加载等级/等级
第一个代码的问题是我需要创建/执行一个新的读卡器,这就是问题所在。我得到“已经有一个打开的DataReader与此连接关联”,因为它是从一个事件运行的,这个事件也是通过填充组合框触发的
我已经想了10个小时了,请帮忙。你忘了关闭阅读器。在所有ADO.NET教程中,您将看到连接、命令和读取器都是在
中使用
块创建的。不使用全局连接,每次都会创建并打开一个新连接。连接池确保了这是一个廉价的操作,所以我应该用块把所有东西都放进去,它会神奇地修复它吗?如果我打开一个读卡器,从读卡器中获取信息以填充作业组合并设置索引,它会触发索引更改事件,这将打开另一个读卡器。基本上,我说的是我的datareader,它正在获取信息并在左侧组合框中选择他们的作业,同时也会触发打开新数据读卡器的事件,因为我打开了一个新读卡器并关闭了它,第一个datareader中的其余部分无法完成,因为该读取器现在已关闭。如果这有道理的话@泛神经炎Kanavos@PanagiotisKanavos我不得不在我的手机上切换到桌面模式,因为你忘了关闭阅读器。在所有ADO.NET教程中,您将看到连接、命令和读取器都是在中使用
块创建的。不使用全局连接,每次都会创建并打开一个新连接。连接池确保了这是一个廉价的操作,所以我应该用块把所有东西都放进去,它会神奇地修复它吗?如果我打开一个读卡器,从读卡器中获取信息以填充作业组合并设置索引,它会触发索引更改事件,这将打开另一个读卡器。基本上,我说的是我的datareader,它正在获取信息并在左侧组合框中选择他们的作业,同时也会触发打开新数据读卡器的事件,因为我打开了一个新读卡器并关闭了它,第一个datareader中的其余部分无法完成,因为该读取器现在已关闭。如果这有道理的话@泛神经炎Kanavos@PanagiotisKanavos不得不在我的手机上切换到桌面模式