如何从SQL查询字符串中转义单引号(仅当它们存在时)

如何从SQL查询字符串中转义单引号(仅当它们存在时),sql,asp.net,Sql,Asp.net,我正在从事一个ASP.NET项目,该项目使用SQL Server作为数据库。我有一个我正试图编写的查询字符串,在其中我将模式名(一个变量)添加到WHERE子句中。尽管它并不常见,但有时架构名称中存在一个单引号(例如Jim的架构)。既然这是一个变化的变量,并且有时引号会存在,那么我该如何转义可能在查询存在时中断查询的单引号呢?我的查询字符串如下: var statement = string.Format("SELECT TABLE_NAME FROM INFORMATION.TAB

我正在从事一个ASP.NET项目,该项目使用SQL Server作为数据库。我有一个我正试图编写的查询字符串,在其中我将模式名(一个变量)添加到WHERE子句中。尽管它并不常见,但有时架构名称中存在一个单引号(例如Jim的架构)。既然这是一个变化的变量,并且有时引号会存在,那么我该如何转义可能在查询存在时中断查询的单引号呢?我的查询字符串如下:

  var statement = string.Format("SELECT TABLE_NAME FROM INFORMATION.TABLES "
  + "  where TABLE_TYPE = 'BASE TABLE' and TABLE_SCHEMA = '{0}'", my.SchemaName);

当不存在单引号时,此查询工作正常。我只需要找到一种方法,当引用确实存在时,逃离它。谢谢

  // doubling your single-quotes should fix this
  var statement = string.Format("SELECT TABLE_NAME FROM INFORMATION.TABLES "
  + "  where TABLE_TYPE = 'BASE TABLE' and TABLE_SCHEMA = '{0}'", my.SchemaName.Replace("'", "''");

应该能满足你的迫切需要。也就是说,您应该参数化您的查询,以便将SQL注入的风险降至最低。

不要转义引号,请参数化您的查询。