我想从使用c#的数据库中读取值。 查询字符串包含多个单引号 - 例如:Esca'pes'(查询字符串正在从文本文件中读取)用一个字符串中的两个单引号替换所有单引号
所以,我想在形成SQL之前用两个单引号替换所有单引号查询。我的代码如下:
if (name.Contains('\''))
{
name = name.Replace('\'','\''');
}
如何解决这个问题?
我想从使用c#的数据库中读取值。 查询字符串包含多个单引号 - 例如:Esca'pes'(查询字符串正在从文本文件中读取)用一个字符串中的两个单引号替换所有单引号
所以,我想在形成SQL之前用两个单引号替换所有单引号查询。我的代码如下:
if (name.Contains('\''))
{
name = name.Replace('\'','\''');
}
如何解决这个问题?
使用字符串,而不是字符文字。
name = name.Replace("'", "''");
但是,它听起来像是你将SQL字符串连接在一起。由于SQL注入的风险,这是一个巨大的“不要”规则在现代应用程序设计中。请改用SQL参数。每个现代DBMS平台都支持它们,包括带有SQL Server和MySQL的ADO.NET,甚至Access都支持它们。
既然你想和两个字符来代替单个字符,你需要使用的字符串替换超载
if (name.Contains('\''))
{
name = name.Replace("'","''");
}
(注:单引号不需要转义字符串,就像他们在性格做记号。)
为什么我们需要检查字符串是否包含单引号或没有更换,如果它包含模式 – Kapil
@Kapil只是被镜像原始用户的问题,而只是更换了不工作的部分将只改变字符串。 –
name = name.Replace("'","''");
在一个不相关的音符,你串联使用字符串SQL?尝试使用参数,这就是他们的意思。你可能会让它比需要的更难。
如何修复?你有错误吗?我还会补充一点,如果阻止SQL注入是你的目标,你最好使用参数化查询。 – Mansfield
'name.Replace(“'”,“''”)'可能是你在做什么? – sybkar
正如其他人所说,这是一个很大的禁忌在DBMS世界,因为有人可能在最终执行你不打算让他们能够运行一个查询中的“参数”传递价值,潜在危害你的系统。在Google上搜索“sql injection”以获得更多关于这种情况如何变坏的信息,并且不会比最近的索尼PlayStation网络黑客更加深入,因为没有遵循此建议可能会引起您的反感。 – shaunhusain