访问字符串,包括来自 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+"'";
您可以使用两个单引号对引号进行转义,如下所示:
"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();