内部联接后数据库表未显示数据

时间:2017-03-06 17:19:28

标签: c# mysql winforms sqlconnection

我有一个C#windows窗体应用程序,我也在使用数据库。 我有3个表:PlayersTournamentsTournamentsPlayers

我只会在表单中显示2个表,TournamentsPlayers表。 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语法或代码有问题吗?

1 个答案:

答案 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语法。
  • 使用表名的缩写,因此在阅读时查询是有意义的。
  • FIx表之间的连接条件,以匹配播放器。玩家与锦标赛在同一场锦标赛中的身份相同。可能,但不太可能。