我有一个从指定列读取值的函数。它看起来像这样:
private bool OpenConnection() // Just opens the connection. No error here.
{
try
{
conn.Open();
return true;
}
catch (MySqlException ex)
{
MessageBox.Show("Connection not opened");
return false;
}
}
private void getStats(string user, string cate, string score)
{
if (OpenConnection())
{
try
{
string getuserstats = $"SELECT {cate} FROM scores WHERE user = '{user}'";
MySqlCommand cmd = new MySqlCommand(getuserstats, conn);
MySqlDataReader getscore = cmd.ExecuteReader();
MessageBox.Show(getscore.Read().ToString()); //outputs false.
while(getscore.Read())//does not run
{
MessageBox.Show("Reading!");//does not run
score = getscore.GetString(0);//does not run
MessageBox.Show(score); //does not run
}
getscore.Close();
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error getting scores!");
conn.Close();
}
}
else
{
MessageBox.Show("Connection not opened!");
}
}
SQL命令部分似乎运行正常,我用一些不同的查询测试它们并且它们都运行良好。
然而,SQL阅读器本身似乎并没有运行。我也没有出现异常错误。
我使用了一个消息框来显示我读者阅读的布尔值,并输出了false。这是为什么?
答案 0 :(得分:1)
Read()
返回false的最可能原因是没有记录与您正在执行的查询匹配。您确定该表中是否有与给定用户名匹配的记录?您连接的数据库是您认为它连接的数据库。
这不相关,但MySqlCommand和MySqlDataReader都是一次性的,连接也是如此,所以你应该把它们放在"使用"阻止,或明确处置它们。