Почему я получаю 'Неверный синтаксис рядом с ключевым словом' INNER '' - ошибка в ASP.net? - PullRequest
0 голосов
/ 11 марта 2011

В SQL Query Analyzer я запускаю этот оператор и не получаю никакой ошибки:

string select = "SELECT " +
"aanvrager.werknemersnaam AS melder , hd_aanvragen.aanvraag_titel, " +
"hd_aanvragen.aanvraag_omschrijving, hd_aanvraag_fase.fase_datum, " +
"hd_melding_niveau_1.niveau_omschrijving AS 'Niveau 1', " +
"hd_melding_niveau_2.niveau_omschrijving AS 'Niveau 2', " +
"hd_aanvragen.outlook_id" +
"FROM hd_aanvragen " +
"INNER JOIN hd_meldingen         ON hd_meldingen.melding_id      =  hd_aanvragen.melding_id " +
"INNER JOIN hd_melding_niveau_1  ON  hd_melding_niveau_1.niveau1_id = hd_meldingen.niveau1_id " +
"INNER JOIN hd_melding_niveau_2  ON  hd_melding_niveau_2.niveau2_id = hd_meldingen.niveau2_id " +
"INNER JOIN hd_aanvraag_fase     ON hd_aanvraag_fase.aanvraag_id =  hd_aanvragen.aanvraag_id " +
"INNER JOIN hd_statussen ON hd_statussen.status_id =  hd_aanvraag_fase.status_id " +
"INNER JOIN  hd_werknemers AS oplosser ON oplosser.werknemer_Id =  hd_aanvraag_fase.werknemer_Id " +
"INNER JOIN hd_werknemers  AS aanvrager ON aanvrager.werknemer_Id =  hd_aanvragen.werknemer_Id " +
"WHERE hd_statussen.status_id = 16";

Но если я запущу этот оператор выбора здесь:

MyDataSource.SelectCommand = select;

Я получаю эту ошибку: неправильный синтаксис рядом с ключевым словом «INNER».

Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде.

Сведения об исключении: System.Data.SqlClient.SqlException: неправильный синтаксис рядом с ключевым словом «INNER».

Ответы [ 4 ]

5 голосов
/ 11 марта 2011

В этой строке отсутствует пробел в конце:

 "hd_aanvragen.outlook_id" +
3 голосов
/ 11 марта 2011

Посмотрите на этот бит:

"hd_aanvragen.outlook_id" +
"FROM hd_aanvragen " +

Итак, ваш SQL будет содержать:

hd_aanvragen.outlook_idFROM hd_aanvragen

Я не думаю, что вы это имели в виду ... (обратите внимание на недостаток пробела в конце первой строки, указанном выше)

Предложения:

  • Подумайте об использовании хранимых процедур, ORM или чего-либо еще, что удерживает такой огромный SQL-код от вашего кода C #
  • Потенциально читать SQL из текстового файла
  • Используйте дословный строковый литерал, предполагая, что ваш источник данных может обрабатывать разрывы строк в своем SQL:

    string select = @"SELECT 
        aanvrager.werknemersnaam AS melder , hd_aanvragen.aanvraag_titel,
        hd_aanvragen.aanvraag_omschrijving, hd_aanvraag_fase.fase_datum,
        hd_melding_niveau_1.niveau_omschrijving AS 'Niveau 1', 
        ...
        WHERE hd_statussen.status_id = 16";
    

Кроме того, если вы собираетесь требовать:

В SQL Query Analyzer я запускаю этот оператор и не получаю никакой ошибки

убедитесь, что вы на самом деле выполняете тот же SQL-запрос. Скопируйте фактическое значение select в отладчик, вставьте его в SQL Query Analyzer, и вы увидите точно такую ​​же проблему.

1 голос
/ 11 марта 2011

Это правильный исходный код?Если вам не хватает пробела в строке

"hd_aanvragen.outlook_id" +

Это должно быть

"hd_aanvragen.outlook_id " +
1 голос
/ 11 марта 2011

Я думаю, что вы пропустили пробел до "ОТ"

"hd_aanvragen.outlook_id" +
"FROM hd_aanvragen "
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...