我有一个C#windows窗体应用程序,我也在使用数据库。
我有3个表:Players
,Tournaments
和TournamentsPlayers
。
我只会在表单中显示2个表,Tournaments
和Players
表。 Tournaments
表格中有一个复选框,我想在Players
表格中仅显示我选中该框的锦标赛中的玩家。
当应用程序启动时,我有一个foreach语句检查所有锦标赛,所以首先所有的玩家都应该在Players
表中显示,但没有玩家显示。
我的代码是:
private void ShowPlayersForSelectedTournaments()
{
string query =
"SELECT a.Name, a.Id FROM Players a,TournamentPlayers b WHERE a.Id=b.TournamentId AND b.TournamentId=@TournamentId";
using (Connection = new SqlConnection(ConnectionString))
using (SqlCommand command = new SqlCommand(query, Connection))
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
foreach (DataGridViewRow row in TournamentsTable.Rows)
{
if (row.Cells.Count > 0 && bool.Parse(row.Cells[0].Value.ToString()))
{
command.Parameters.AddWithValue("@TournamentId", row.Cells[1].Value);
DataTable tournamentPlayersList = new DataTable();
adapter.Fill(tournamentPlayersList);
PlayersTable.DataSource = tournamentPlayersList;
break;
}
}
}
}
我尝试过一个简单的选择,一切正常,但是使用这种sql语法它似乎不起作用。 我尝试过另一种类似的mysql语法,例如:
string query = "SELECT a.Name FROM Players a INNER JOIN TournamentPlayers b ON a.Id=b.TournamentId WHERE b.TournamentId=@TournamentId";
但Players
表中仍未显示任何内容。
我做错了什么?我的mysql语法或代码有问题吗?
答案 0 :(得分:1)
这是您的查询:
SELECT a.Name, a.Id
FROM Players a,TournamentPlayers b
WHERE a.Id=b.TournamentId AND b.TournamentId=@TournamentId;
它有多个问题。这应该有效:
SELECT p.Name, p.Id
FROM Players p JOIN
TournamentPlayers tp
ON tp.playerId = p.id
WHERE tp.TournamentId = @TournamentId;
注意:
FROM
子句中使用逗号。 始终使用正确的JOIN
语法。