Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SqlException无法绑定多部分标识符“A.Column”_C#_Sql_Sql Server_Sqldatareader_Sqlclient - Fatal编程技术网

C# SqlException无法绑定多部分标识符“A.Column”

C# SqlException无法绑定多部分标识符“A.Column”,c#,sql,sql-server,sqldatareader,sqlclient,C#,Sql,Sql Server,Sqldatareader,Sqlclient,我使用SqlDataReader和SqlCommand将以下查询传递给我的数据库 query = "SELECT A.Codigo, A.Descripcion, A.Precio, " + "A.Cantidad, B.Codigo AS [Código de Categoría], B.Descripcion AS [Descripción de Categoría]" +

我使用SqlDataReader和SqlCommand将以下查询传递给我的数据库

query = "SELECT A.Codigo, A.Descripcion, A.Precio, " +
                    "A.Cantidad, B.Codigo AS [Código de Categoría], B.Descripcion AS [Descripción de Categoría]" +
                    " FROM BuenPrecio.DBO.Producto A" +
                    "INNER JOIN BuenPrecio.DBO.Categoria B " +
                    "ON A.CodigoCategoria = B.Codigo " +
                    "ORDER BY A.CodigoCategoria";

SqlDataReader reader;

conn = new SqlConnection(conexionString);

comando.CommandType = CommandType.Text;
comando.CommandText = query;
comando.Connection = conn;

conn.Open();
reader = comando.ExecuteReader();
conn、comando和conexionString的初始声明是在之前声明的,我只是不把它们包括在这里

查询可以在SQLServerManagementStudio中成功执行,并生成预期的结果

但在我的C程序中,在尝试执行它时,行reader=comando.ExecuteReader会引发SqlException:

无法绑定多部分标识符A.Codigo

对于select中的每个A列,而不仅仅是Codigo


我一直在阅读关于这个问题的其他类似标题的问题,大多数问题都说连接缺少对表的引用是一个问题,但是正如您所看到的,连接中使用的两个表都被正确引用和别名。此外,如我所说,查询在DBMS中成功执行。

如果查询中的串联之间缺少空格,请尝试以下操作:

"SELECT A.Codigo, A.Descripcion, A.Precio," +
" A.Cantidad, B.Codigo AS [Código de Categoría], B.Descripcion AS [Descripción de Categoría]" +
" FROM BuenPrecio.DBO.Producto A" +
" INNER JOIN BuenPrecio.DBO.Categoria B" +
" ON A.CodigoCategoria = B.Codigo " +
" ORDER BY A.CodigoCategoria"

正如@goldow所提到的,您的SQL格式不正确。在内部之前没有空间,它变成了内部,因此产生了错误

                " FROM BuenPrecio.DBO.Producto A" +
                "INNER JOIN BuenPrecio.DBO.Categoria B " +
要消除这些类型的问题,最好使用字符串文字。您只需在字符串前面加上@符号。它允许您使用多行,您可以更清楚地查看查询,但如果您需要在查询中使用任何双引号,请确保使用另一个双引号(即2个双引号)进行转义

请参阅此处有关C中字符串文字的更多信息

好处:与您的问题无关,但千万不要使用动态查询,在动态查询中,您使用来自不可靠源(如来自应用程序的数据输入表单)的输入构建SQL字符串。很难清理这些输入,所以最好使用参数化查询。否则,这可能导致应用程序中存在SQL注入漏洞

有关参数化查询的详细信息,请参见此处:


您似乎缺少一个和内部连接之间的空间。除非是打字错误。甚至不确定这是否会导致您给出的错误。也许可以尝试在SQL Profiler中查看已执行的查询,以查看代码和DBGood catch之间是否存在任何格式错误,这就是问题所在。它是在DBMS中运行的,因为当我删除额外的和+符号时,我无意中删除了空格。AINNER==问题,我对游戏有点慢:good eye@devNull!
query = @" 
  SELECT A.Codigo, A.Descripcion, A.Precio, 
         A.Cantidad, B.Codigo AS [Código de Categoría], B.Descripcion AS [Descripción de Categoría]
  FROM BuenPrecio.DBO.Producto A
  INNER JOIN BuenPrecio.DBO.Categoria B
            ON A.CodigoCategoria = B.Codigo 
  ORDER BY A.CodigoCategoria
";