0

我想tblBranches根据用户在组合框(cboBranch.Text)中的选择来检索一些特定的数据,一个是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();
4

2 回答 2

1

ToString()您需要调用该方法,而不是调用该方法,该GetString()方法传递查询中列的序号位置的从零开始的索引,在这种情况下为零,因为您的查询中只有一列。

在此之前,您必须调用该Read()方法将读取器推进到第一条或下一条记录,并且您还需要检查返回值,因为它会返回 abool以指示是否找到了另一条记录。

所以替换这条线......

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";
于 2013-05-12T06:09:17.073 回答
0

只是一个补充:如果结果只有 1 行,使用 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
}
于 2013-05-13T12:13:34.857 回答