我有一个使用ASP.NET C#保存到SQL数据库的文本框。
问题是使用引号,例如使用像他这样的单词。保存时,我收到SQL错误。
从经验到解决问题,我使用replace命令查找所有引号的出现并用另一个字符替换它们。然后,如果我要读取数据库和之前保存的文本,我会再次替换。
这样做有好处吗?或者你仍然需要使用这种“旧”的方式。
答案 0 :(得分:6)
使用参数化查询。
使用replace是危险的,可能导致无意的SQL注入漏洞。
答案 1 :(得分:3)
始终使用参数化查询。永远不要将字符串连接在一起(使用未经过清理的输入信息)来动态创建SQL。您可能会受到SQL注入攻击的攻击。</ p>
仔细阅读以下指南:
http://www.csharp-station.com/Tutorials/AdoDotNet/Lesson06.aspx
当您了解以下漫画时,您已准备好编码:
答案 2 :(得分:0)
正如其他答案所指出的,此处的正确答案是使用参数化查询。
然而,这有时是不可能的。在这些情况下,你最好将引号加倍:
String str = "he's";
str = str.Replace("'", "''");
答案 3 :(得分:0)
有两种方法可以解决这个问题:
我会推荐第一种方法,因为在我看来它更清洁(更安全)。如果您在ASP.NET中使用C#,则可以执行以下示例中的操作:
string clientName = "Test client";
SqlCommand sqlCommand = new SqlCommand("SELECT COUNT(*) FROM Client WHERE UPPER(ClientName) = UPPER(@ClientName)", connection);
sqlCommand.Parameters.AddWithValue("@ClientName", clientName);