我想根据组合框中用户的选择(cboBranch.Text)从tblBranches
检索一些特定数据,一个是class_name
但是当我尝试运行程序时,消息框显示MySql.Data.MySqlClient.MySqlDataReader
,那么如何才能正确检索数据库中的数据?
query = "SELECT class_name FROM tblBranches WHERE branch_name=@branch";
MySqlCommand cmd = new MySqlCommand(query, con);
cmd.Parameters.Add("@branch", MySqlDbType.VarChar, 30).Value = _order.cboBranch.Text;
MySqlDataReader dr;
con.Open();
dr = cmd.ExecuteReader();
string class_name = dr.ToString();
MessageBox.Show(class_name);
con.Close();
答案 0 :(得分:1)
不是调用ToString()
方法,而是需要调用GetString()
方法传递查询中列的序号位置的从零开始的索引,在这种情况下为零,因为有查询中只有一列。
在此之前,您必须调用Read()
方法将读者推进到第一个或下一个记录,并且还需要检查返回值,因为它将返回bool
以指示是否有其他记录被发现了。
所以替换这一行......
string class_name = dr.ToString();
使用
string class_name = dr.Read() ? dr.GetString(0) : "Nothing Found";
或者如果可以返回多条记录......
string class_names = string.Empty;
while (dr.Read())
class_names = dr.GetString(0) + "\n";
答案 1 :(得分:0)
只是一个补充:使用ExecuteScalar是否更容易,以防结果只有一行?
示例:
MySqlCommand cmd = new MySqlCommand(query, con);
cmd.Parameters.Add("@branch", MySqlDbType.VarChar, 30).Value = _order.cboBranch.Text;
var class_name = cmd.ExecuteScalar();
if (class_name != null)
{
//DoSomething with your result here.
}else{
//Item not found, handle it here
}