如何使用MySqlDataReader从数据库mySQL中检索数据?

时间:2013-05-12 05:58:03

标签: c# mysql database

我想根据组合框中用户的选择(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();

2 个答案:

答案 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
}