C# 如何用字符串中的双撇号替换撇号?
我有一根绳子C# 如何用字符串中的双撇号替换撇号?,c#,sql,C#,Sql,我有一根绳子 比您可能需要的更详细的ESP概述 当插入到SQL表中时,它给出了一个错误。所以我想用双撇号替换字符串中的撇号 比您可能需要的更详细的ESP概述 如何在c#?中操作此操作非常简单: string s = "good overview of ESP's in more detail than you probably need."; string escaped = s.Replace("'","''"); 注意:使用命令参数通常更安全。尤其是如果输入字符串的值不受代码控制(即用户输
比您可能需要的更详细的ESP概述
当插入到SQL表中时,它给出了一个错误。所以我想用双撇号替换字符串中的撇号
比您可能需要的更详细的ESP概述
如何在c#?中操作此操作非常简单:
string s = "good overview of ESP's in more detail than you probably need.";
string escaped = s.Replace("'","''");
注意:使用命令参数通常更安全。尤其是如果输入字符串的值不受代码控制(即用户输入)。使用参数对象
myCommand.InsertCommand.Parameters.Add("@myString", SqlDbType.VarChar, 200);
myCommand.InsertCommand.Parameters["@myString"].Value = @"good overview of ESP's in more detail than you probably need.";
String.Replace(String,String)
应该可以正常工作。在本例中,您需要:
String.Replace("'", "''")
然而,我不认为这能解决你的问题。我想你更合适的选择是:
String.Replace("'", "\'")
原因是MySQL和我想象的其他版本的SQL都希望字符串用单引号括起来。我研究这个问题已经很久了。在客户机上执行此操作,将单引号替换为两个单引号。如果您正在执行具有多个varchar输入参数的sp,则此操作有效。唯一的问题是SQL注入,也就是说,人们可以在客户端看到你在做什么,这从来都不是一件好事。解决这个问题的唯一方法是在服务器上使用SQLparameters,正如他们前面所说的那样。myCommand.InsertCommand.Parameters.Add(“@myString”,SqlDbType.VarChar,200);
myCommand.InsertCommand.Parameters[“@myString”].Value您应该使用数据库转义函数。如果不这样做,可能会使自己容易受到SQL注入的攻击。或者,更好的是:参数化查询。虽然这在技术上是正确的,但它将原始询问者引导到了错误的方向。最好使用正确的参数并避免SQL注入漏洞。如果字符串被转义,注入还会发生吗?据我所知,注入通过使用一个撇号提前终止了sql。我同意这直接回答了这个问题,但它在一个糟糕的实践中帮助了OP。如果使用参数化查询,这个问题就会消失,它们采用的做法可以防止注入攻击,帮助执行计划缓存等。@dambrisco:一些SQL方言使用双撇号(“”)而不是您为MySQL建议的转义序列(\')。@Dems-我完全同意,但是,考虑到这个问题,我想采取一些小步骤可能会更好。向似乎不了解转义序列的人解释参数化可能不是一个好的开始。不管怎么说,使用道克的解决方案比我的要好得多。@Olivier Jacot Descombes-就像在某些方言中,撇号的转义序列是双撇号?我对这个想法有点目瞪口呆,所以我只希望有一些实际的原因,而不是我认为更容易解析的东西。