c # SqlDataReader выдает синтаксическую ошибку, но команда прекрасно работает в SQL Server? - PullRequest
0 голосов
/ 03 ноября 2019

Я получаю синтаксическую ошибку от моей команды SQL, показанной в коде ниже. Ошибка происходит в строке ExecuteReader, говоря:

Неверный синтаксис рядом с ключевым словом 'JOIN'. '

Я понятия не имею, почему он выдает синтаксическую ошибку, команда прекрасно работает в SQL Server. Вот код:

private void button1_Click(object sender, EventArgs e)
{
    SqlCommand sqlcomViewSmashRoster;
    SqlDataReader dataReader;
    String strSql, strOutput ="";

    strSql = "SELECT Roster.CharacterName, Roster.TotalTournamentsParticiaped, Roster.TotalWins, Roster.TotalLosses, Roster.Championships, Roster.InjuriesCaused, Roster.Injured" +
             "FROM Roster" +
             "INNER JOIN VideoGames" +
             "ON VideoGames.VideoGame_ID = Roster.VideoGame_ID" +
             "WHERE roster.VideoGame_ID = 2";

    cnn.Open();

    sqlcomViewSmashRoster = new SqlCommand(strSql, cnn);

    dataReader = sqlcomViewSmashRoster.ExecuteReader();

    while (dataReader.Read())
    {
        strOutput = strOutput + dataReader.GetValue(0) + " - " + dataReader.GetValue(1) + "\n";
    }

    cnn.Close();

    MessageBox.Show(strOutput);
}

Спасибо!

Ответы [ 2 ]

8 голосов
/ 03 ноября 2019

Пробелы. Помните, что:

"abc" +
"def"

- это "abcdef"

Строковые литералы дословно являются вашими друзьями:

strSql = @"
SELECT Roster.CharacterName, Roster.TotalTournamentsParticiaped, Roster.TotalWins,
       Roster.TotalLosses, Roster.Championships, Roster.InjuriesCaused, Roster.Injured
FROM Roster
INNER JOIN VideoGames
ON VideoGames.VideoGame_ID = Roster.VideoGame_ID
WHERE roster.VideoGame_ID = 2
";

Мало того, что код проще во-первых,но вы можете легко копировать / вставлять между SSMS и devenv, без добавления кавычек и т. д.

1 голос
/ 03 ноября 2019

Добавьте пробел перед ", иначе он будет объединен как пример с одним словом

"FROM Roster" +
             "INNER JOIN VideoGames" +

станет FROM RosterINNER JOIN VideoGames, поэтому добавьте пробел до " и после "

пример

strSql = "SELECT Roster.CharacterName, Roster.TotalTournamentsParticiaped, Roster.TotalWins, Roster.TotalLosses, Roster.Championships, Roster.InjuriesCaused, Roster.Injured " +
             " FROM Roster " +
             " INNER JOIN VideoGames " +
             " ON VideoGames.VideoGame_ID = Roster.VideoGame_ID " +
             " WHERE roster.VideoGame_ID = 2 ";
...