访问字符串,包括来自 SQL Server 2008 的单引号

本文关键字:Server 2008 单引号 SQL 字符串 包括 访问 | 更新日期: 2023-09-27 18:37:19

我正在用C#(Visual Studio 2010)创建一个网站。我的数据库中有包含单引号的字符串值。我用双单引号替换了它们。但是,在将数据填充到 CheckBoxList 中时,将显示双单引号而不是单引号。我的查询是:

SqlDataSource1.SelectCommand = select column1 from table1 WHERE column1<>'"+var1+"'";

访问字符串,包括来自 SQL Server 2008 的单引号

您可以使用两个单引号对引号进行转义,如下所示:

"select column1 from table1 where column1 <> ''"+var1+"''";

但请记住,您正在为 SQL 注入攻击敞开心扉。适当使用 SQL 参数。

与其

将伪造的数据存储在数据库中,然后在输出时将其更改回去,不如在查询中转义单引号 - 对于 MSSQL,单引号通过加倍来转义。

但是,如果在建立连接时将查询参数化并将值(现在不需要转义)分配给 SqlParameter 对象,则会获得更安全且运行速度更快的查询。

如果您的var1是变量,则您的代码不会将其括为双单引号。

我认为正确的语法应该是这样的;

"select column1 from table1 WHERE column1 <> '" + String.Format("''{0}''", var1) + "'";

但更重要的是,应始终使用参数化查询。这种字符串串联对SQL注入攻击是开放的。

我停止在数据库中存储单引号以双单引号 (' ')。相反,正如建议的那样,我使用了参数化查询。我停止使用SqlDataSource。法典:

SqlCommand cmd=new SqlCommand("select column1 from table1 where column1<>@var1",conn);cm.Parameters.Add("var1",SqlDbType.VarChar).值 = var1;rdr=cmd.ExecuteReader();