解析参数化查询C#时出错[重复]

Posted

技术标签:

【中文标题】解析参数化查询C#时出错[重复]【英文标题】:Error while parsing parametrized query C# [duplicate] 【发布时间】:2014-06-03 16:50:05 【问题描述】:

我在尝试解析参数化查询时不断收到错误消息。 错误:错误中的令牌 = @tableName

似乎变量一切正常,尝试传递字符串仍然相同。

using (SqlCeCommand command = new SqlCeCommand("SELECT * FROM @tableName WHERE @columnName = @id", connection))
            
                command.Parameters.Add(new SqlCeParameter("tableName", tableName));
                command.Parameters.Add(new SqlCeParameter("columnName", column));
                command.Parameters.Add(new SqlCeParameter("id", id));

编辑1:

是的,这可能是查询数据库的错误方式。例如,如果您需要在运行时的不同时间访问不同的表,那么最合适的方法是什么。我的意思是访问数据库的类的体系结构。

我正在尝试使用它在不同的运行时访问两个表。我只是传递这三个变量并返回输出。

如果我违反了规则,请道歉。

EDIT2:

对不起,如果我没有说清楚,但我的问题是。

在运行应用程序时,哪种架构(如果我可以称之为)更适合在不同时间访问不同的数据库表?我的意思是你的解决方案是什么?是好是坏等等。

【问题讨论】:

阅读这篇文章:***.com/questions/1325044/… 您并没有违反规则,但是如果您想知道方向,您必须告诉我们您想去哪里,而我们不知道。不要告诉我们您使用的是什么解决方案,tell us what you want to do. 【参考方案1】:

您不能将参数放在表名和列上。我还看到您正在使用 SQL Compact 版本。您可以像这样在 C# 中设置命令:

sqlCommand.CommandText = "SELECT * FROM " + yourtablename + " WHERE " + yourcolumnname+" LIKE @param";
sqlCommand.Parameters.Add("@param", SqlDbType.NVarChar).Value = paramVal + "%"; 

仅供参考,您应该知道此代码对SQL Injection 开放。

【讨论】:

【参考方案2】:

我相信 SqlCeCommand 和 SqlCommands 的工作方式相同,因此参数必须以 @ 开头:“@Name”传递。 除了查询中的“TableName”和“columnName”之外,应该是 Sql 对象名称,所以不要参数化它们。 改为动态构建查询,然后传递过滤参数@id。 你可以试试这样的:

using (SqlCeCommand command = new SqlCeCommand(string.Format("SELECT * FROM 0 WHERE 1 = @id", tableName, column), connection))
            
                command.Parameters.Add(new SqlCeParameter("@id", id));

【讨论】:

以上是关于解析参数化查询C#时出错[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何解决pig中的“解析时出错。无法实例化”?

MySQL 参数化查询的功能就像它在 C# 应用程序中未参数化一样

如何在 C# 中创建动态参数化 SQL 查询字符串

OLEDB 参数化查询

C# 中是否支持 Like 和 ln 条件的参数化查询 ?

如何避免从 C# 构建的 Sql Server 2005 参数化查询变慢