在asp.net中使用SQL查询中的变量(C#)

前端之家收集整理的这篇文章主要介绍了在asp.net中使用SQL查询中的变量(C#)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个表单的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

猜你在找的asp.Net相关文章