无法绑定 SqlException 无法绑定多部分标识符"A.Column"



我正在使用SqlDataReader和SqlCommand将以下查询传递给我的DB

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();

(conncomandoconexionString的初始声明是以前声明的,我只是不在这里包括它们。(

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

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

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

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

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

正如@goldow所提到的,您的SQL格式不正确。在CCD_ 5之前没有空间,它变成CCD_。

" 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注入漏洞。

有关参数化查询的更多信息,请参阅此处:

如何将SqlDataReader与c#中的参数化查询一起使用?

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

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

相关内容

  • 没有找到相关文章

最新更新