我不熟悉使用Data Reader,我需要以下代码的帮助,我想从数据库中检索单个数据。
MySqlDataAdapter data = new MySqlDataAdapter(cmd);
conn.Open();
DataTable dt = new DataTable();
data.Fill(dt);
gridView1.DataSource = dt;
int retrievedValue = 0;
using (MySqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
if ((int)reader["order_status"] == 0)
{
retrievedValue = (int)reader.GetValue(0);
GridView View2 = sender as GridView;
e.Appearance.BackColor = Color.Green;
e.Appearance.BackColor2 = Color.ForestGreen;
}
}
}
答案 0 :(得分:5)
reader["order_status"]
返回object
,因为您告诉它是已经整数,您需要先将其强制转换为int
。
您还需要使用==
operator,因为它是一个相等运算符。 =
operator是一个赋值运算符。
if ((int)reader["order_status"] == 0)
或者,您可以将GetInt32
method与从零开始的列号一起使用。我们假设它是您的查询返回的第一列,您可以像使用它一样使用它;
if(reader.GetInt32(0) == 0)
顺便说一下,如果你只想获得单一值,我强烈怀疑你可能想要使用ExecuteScalar
方法,因为它得到了第一行的第一列。然后,您可以将查询结构化为SELECT order_status FROM ...
等。
答案 1 :(得分:1)
请务必在while (reader.Read())
之前分配一个变量,否则会出现错误。完成使用后,请关闭数据阅读器。像这样:
using (MySqlDataReader reader = cmd.ExecuteReader())
{
int retrievedValue = 0;
while (reader.Read())
{
retrievedValue = (int)reader.GetValue(0);
if (retrievedValue == 0)
{
GridView View2 = sender as GridView;
e.Appearance.BackColor = Color.Green;
e.Appearance.BackColor2 = Color.ForestGreen;
}
else if (retrievedValue == 1)
{
GridView View2 = sender as GridView;
e.Appearance.BackColor = Color.Red;
e.Appearance.BackColor2 = Color.ForestGreen;
}
}//and so on...
reader.Close();
}
我希望这是你正在寻找的。 p>