多部分标识符无法绑定C#和SQL

Mat*_*att 3 c# sql visual-studio-2010

我正在尝试为WCF服务执行SQL查询,因为我正在使用的数据库没有存储过程来返回我需要的数据.你可以看到下面的代码.我正在使用VS2010并连接到Microsoft SQL Server.我得到的例外是:无法绑定多部分标识符.谢谢您的帮助.

        public List<ObjectCodeGroup> GetObjectCodeGroup()
    {
        TCDataDataContext dc16 = new TCDataDataContext();
        List<ObjectCodeGroup> results = new List<ObjectCodeGroup>();

        var objectCodeResults = dc16.ExecuteQuery<ObjectCodeGroup>(@"select t1.codeid," +
            "t1.code, t1.catalogtype, t1.codegroup, t1.codetext, t1.codegrouptext, t1.codedesc, t1.state_id from CODES t1" +

            "inner join ( select MIN(codeid) codeid, codegroup from CODES group by codegroup)" +
                "t2 on t1.codeid = t2.codeid and t1.codegroup = t2.codegroup WHERE catalogtype = 11");

        foreach (ObjectCodeGroup o in objectCodeResults)
        {
            results.Add(new ObjectCodeGroup()
           {
               codegrouptext = o.codegrouptext
           });
        }

        return results;
    }
Run Code Online (Sandbox Code Playgroud)

Rus*_*Uhl 6

你缺少一堆空格,所以这是问题的一部分.添加空格(在行尾)!

var objectCodeResults = dc16.ExecuteQuery<ObjectCodeGroup>(@"select t1.codeid, " +
"t1.code, t1.catalogtype, t1.codegroup, t1.codetext, t1.codegrouptext, t1.codedesc, t1.state_id from CODES t1 " +
"inner join ( select MIN(codeid) codeid, codegroup from CODES group by codegroup) " +
"t2 on t1.codeid = t2.codeid and t1.codegroup = t2.codegroup WHERE catalogtype = 11");
Run Code Online (Sandbox Code Playgroud)

您的原始查询看起来像SELECT BLAH FROM CODES t1inner join (MOREBLAH)....具体来说,看看t1inner.这就是弄乱查询的原因.

  • @matt:很高兴我可以帮忙:)将来,如果你绝对必须有一个像这样的SQL字符串(而不是从资源文件或其他方法调用它),我建议在逻辑和一致的地方打破字符串.例如,`SELECT stuff`(br)`FROM table`(br)`JOIN other ON a = b`(br)`WHERE c = d`(br)等.由于语法将会更容易诊断这些问题以更好的格式 (2认同)