Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何用字符串中的双撇号替换撇号?_C#_Sql - Fatal编程技术网

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-就像在某些方言中,撇号的转义序列是双撇号?我对这个想法有点目瞪口呆,所以我只希望有一些实际的原因,而不是我认为更容易解析的东西。