2

比较简单的问题

我有一个类似于以下的 SQL 字符串:

query = "select * from table_name where name ='"+varName+"' and 
date ='"+varDate+"' order by state desc";

varNamevarDate是从另一个数据库表上的先前选择查询中定义的。它们的值可能包含 ' : / 和其他特殊字符。

有没有办法通过使用 C# 或 SQL 来“转义”上述 select 语句中的 varName、varDate 的内容?

我不想隐藏特殊字符:)

编辑:

忘了包括 - 设置是 MSSQL

4

2 回答 2

6

您可以使用任何相当成熟的 API 参数化您的查询。ADO.NET 中提供了这种支持:

string query = "select * from table_name where name = @name and date = @date order by state desc";
using (SqlCommand cmd = new SqlCommand(query))
{
  cmd.Parameters.Add("@name", name);
  cmd.Parameters.Add("@date", date);
  using (SqlDataReader reader = cmd.ExecuteReader())
  { ... }
}
于 2012-09-21T21:36:51.987 回答
2

我会把它编译在一个存储过程中

注意:不管转义,你当前的代码对于 sql 注入都是开放的

于 2012-09-21T21:36:07.807 回答