**结案。**此问题不可复制或由打字错误引起。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
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中成功执行。
2条答案
按热度按时间zengzsys1#
如果查询中的串联之间缺少空格,请尝试以下操作:
9wbgstp72#
正如@goldow提到的,您的sql格式不正确。前面没有空位
INNER
它变成了AINNER
因此出现了错误。要消除这些类型的问题,请使用
string literals
. 你只要在你的字符串前面加上@
签字。它允许您使用多行,您可以更清楚地看到您的查询(但如果您需要使用双引号)"
在查询中,确保用另一个双引号转义,即2个双引号""
).有关c中的字符串文字的更多信息,请参见此处#c中的多行字符串文字#
好处:与您的问题无关,但千万不要使用动态查询,在动态查询中,您使用来自不可靠源(如来自应用程序的数据输入窗体)的输入构建sql字符串。很难清理这些输入,所以最好使用参数化查询。否则,这会导致应用程序中存在sql注入漏洞。
有关参数化查询的详细信息,请参见此处:
如何在c#中将sqldatareader与参数化查询结合使用?