public void ShowFirstFiveHighScore()
{
string query = "SELECT 'key', 'PlayerName', 'HighScore' FROM PlayerPoints ORDER BY HighScore DESC LIMIT 5";
if (this.OpenConnection() == true)
{
MySqlCommand cmd = new MySqlCommand(query, _connection);
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
MessageBox.Show(reader.GetString(...);
}
cmd.ExecuteNonQuery();
this.CloseConnection();
}
}
我尝试显示列" PlayerName"和" HighScore"。也许在MessageBox中?任何帮助?感谢。
答案 0 :(得分:2)
首先,当您在查询的'
部分中调用列名时,不需要使用带引号的单引号(SELECT
)。您需要将它与字符值一起使用。
其次,MySqlDataReader.GetString
method将int
作为参数,从零开始列号。这意味着您可以使用1
和2
指定列,并根据需要显示这些列。
KEY
是MySQL中的reserved word。您需要使用`
字符引用它。 但,最佳解决方案是将名称更改为非保留字。
SELECT
语句对ExecuteNonQuery
毫无意义。它根本没有任何。
您需要使用using
statement来处理MySqlCommand
和MySqlDataReader
(写作时MySqlConnection
)。
string query = "SELECT `key`, PlayerName, HighScore FROM PlayerPoints ORDER BY HighScore DESC LIMIT 5";
using(MySqlCommand cmd = new MySqlCommand(query, _connection))
using(MySqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
MessageBox.Show(string.Format("PlayerName: {0} HighScore: {1}",
reader.GetString(1),
reader.GetString(2)));
}
}
感谢@Soner。有用。如何在a中显示所有五个结果 MessageBox的?不是在五个不同的MessageBoxes?
然后,您可以在 while语句中的一个字符串中连接5
行,并在 while语句之外显示它。等;
string s = "";
while (reader.Read())
{
s += string.Format("PlayerName: {0} HighScore: {1}\n",
reader.GetString(1),
reader.GetString(2)));
}
MessageBox.Show(s);
答案 1 :(得分:0)
public void ShowFirstFiveHighScore()
{
string query = "SELECT 'key', PlayerName, HighScore FROM PlayerPoints ORDER BY HighScore DESC LIMIT 5";
if (this.OpenConnection() == true)
{
MySqlCommand cmd = new MySqlCommand(query, _connection);
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
MessageBox.Show(string.Format("{0}-{1}"),reader.GetString(1),
reader.GetString(2));
}
cmd.ExecuteNonQuery();
this.CloseConnection();
}
}