sqlexception无法绑定多部分标识符“a.column”

qvtsj1bj  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(489)

**结案。**此问题不可复制或由打字错误引起。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

9个月前关门了。
改进这个问题
我使用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();

(a)初步声明 conn , comando 以及 conexionString 我只是不把它们包括在这里。)
查询可以在SQLServerManagementStudio中成功执行,并产生预期的结果。
但在我的c程序中,在尝试执行它时,该行会抛出一个sqlexception reader = comando.ExecuteReader() :
无法绑定多部分标识符“a.codigo”
(对于select中的每个a列,而不仅仅是codigo)
我读过其他类似标题的问题,其中大多数都说连接缺少对表的引用是个问题,但是正如您所看到的,连接中使用的两个表都被正确引用并使用了别名。此外,如我所说,查询在dbms中成功执行。

zengzsys

zengzsys1#

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

"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"
9wbgstp7

9wbgstp72#

正如@goldow提到的,您的sql格式不正确。前面没有空位 INNER 它变成了 AINNER 因此出现了错误。

" FROM BuenPrecio.DBO.Producto A" +
                "INNER JOIN BuenPrecio.DBO.Categoria B " +

要消除这些类型的问题,请使用 string literals . 你只要在你的字符串前面加上 @ 签字。它允许您使用多行,您可以更清楚地看到您的查询(但如果您需要使用双引号) " 在查询中,确保用另一个双引号转义,即2个双引号 "" ).

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
";

有关c中的字符串文字的更多信息,请参见此处#c中的多行字符串文字#
好处:与您的问题无关,但千万不要使用动态查询,在动态查询中,您使用来自不可靠源(如来自应用程序的数据输入窗体)的输入构建sql字符串。很难清理这些输入,所以最好使用参数化查询。否则,这会导致应用程序中存在sql注入漏洞。
有关参数化查询的详细信息,请参见此处:
如何在c#中将sqldatareader与参数化查询结合使用?

相关问题