加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 20:01:08 所属栏目:asp.Net 来源:网络整理
导读:我有这个表单的SQL查询 string cmdText = "Select * from " + searchTable + "WHERE " + searchTable + "Name =' " + searchValue + "'"; 基本上我要做的是从数据库的Actors表中获取特定actor的信息.变量searchTable的值为’Actor’,即表名,searchValue具有a
我有这个表单的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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读