我有这个表单的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注入攻击!)
>增强性能:可以缓存该查询的查询计划,并在第二次,第三次运行时重复使用
PS:您的设置中的原始问题是:在表名的第一个出现和WHERE子句之间没有任何空格 – 因此您将获得:
SELECT * FROM ActorWHERE ActorName ='.....'
如果你真的坚持将你的sql语句连接起来(我不推荐它!),那么你需要在你的表名和你的WHERE之间加一个空格!
更新:在ADO.NET中学习参数化查询的一些资源:
> The C# Station ADO.NET Tutorial / Lesson 06: Adding Parameters to Commands
> Using Parameterized Queries with the SqlDataSource