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

标签 c# asp.net sql

我有一个这种形式的 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/

相关文章:

c# - 在 C# 中将 DataGridView DataSource 设置为 DataTable 很慢

c# - 将 ASMX 重定向到另一台服务器

java - 如何使用jooq来表达mysql REGEXP?

sql - 我可以让 postgres plpgsql 函数返回可变列记录吗?

sql - 如何查看 plpgsql 生成的 SQL

c# - 如何获取最后一个错误(WSAGetLastError)?

c# - 安全地实现两因素身份验证

c# - 设置查询结果对象的小数精度

asp.net - 配置多个网站在一个 Web 角色下运行

asp.net - String.Format - 我的字符串有什么问题?