为什么我在关键字'INNER'附近得到'不正确的语法 - 在ASP.net中出错?

时间:2011-03-11 13:25:10

标签: c# asp.net 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', " +
"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";

但是如果我在这里运行这个select语句:

MyDataSource.SelectCommand = select;

我收到此错误:关键字“INNER”附近的语法不正确。

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.Data.SqlClient.SqlException:关键字“INNER”附近的语法不正确。

4 个答案:

答案 0 :(得分:5)

这一行最后缺少一个空格:

 "hd_aanvragen.outlook_id" +

答案 1 :(得分:3)

看看这一点:

"hd_aanvragen.outlook_id" +
"FROM hd_aanvragen " +

所以你的SQL将包含:

hd_aanvragen.outlook_idFROM hd_aanvragen

我不认为你的意思是......(注意上面引用的第一行末尾没有空格)

建议:

  • 考虑使用存储过程,ORM或其他任何使C#代码中存在如此巨大SQL的内容
  • 可能从文本文件中读取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查询分析器中,我运行此语句,我没有收到错误

确保您实际运行相同的SQL查询。在调试器中复制select实际值,将其粘贴到SQL查询分析器中,您将看到完全相同的问题。

答案 2 :(得分:1)

我认为你错过了“FROM”之前的空白

"hd_aanvragen.outlook_id" +
"FROM hd_aanvragen "

答案 3 :(得分:1)

这是正确的源代码吗?比你错过线上的空格

"hd_aanvragen.outlook_id" +

这应该是

"hd_aanvragen.outlook_id " +