我有一个这种形式的 SQL 查询
string cmdText = "Select * from " + searchTable
+ "WHERE " + searchTable
+ "Name =' " + searchValue + "'";
基本上,我要做的是从数据库的 Actors 表中获取特定 Actor 的信息。变量 searchTable 的值是“Actor”,它是表名,searchValue 是 Actor 的名字(由 Actor 表中的 ActorName 属性表示,这里我试图通过连接单词“Actor”来形成属性的名称' 和 '姓名' )
所以,好吧,所有这些串联导致(或至少应该导致)以下形式的查询:
Select * from Actor where ActorName ='some actor';
但是当我尝试运行它时,它会在浏览器中显示错误“'=' 附近的语法不正确”。有人可以帮忙吗?
最佳答案
您可以将(并且应该!)参数放入您的 SQL 查询中以获取例如中的值您的 WHERE
子句 - 但您不能参数化表名之类的东西。
所以我将该查询重写为:
SELECT (list of columns)
FROM dbo.Actor
WHERE ActorName = @ActorName
然后只传入 @ActorName
的值。
如果你需要为董事做同样的事情,你必须有第二个查询
SELECT (list of columns)
FROM dbo.Directors
WHERE DirectorName = @DirectorName
像这样使用参数
- 增强安全性(禁止 SQL 注入(inject)攻击!)
- 提高性能:可以缓存该查询的查询计划并在第二次、第三次运行时重复使用
PS:您设置中的原始问题是:您的表名的第一次出现和 WHERE
子句之间没有任何空格 - 因此您会得到:
SELECT * FROM ActorWHERE ActorName ='.....'
如果您真的坚持将 SQL 语句连接在一起(我不推荐它!),那么您需要在表名和WHERE
之间放置一个空格!
更新:一些用于了解 ADO.NET 中的参数化查询的资源:
关于c# - 在 asp.net (C#) 的 SQL 查询中使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5853660/