在C#

时间:2016-04-05 09:17:07

标签: c# sql .net

我有一个问题,我想用SQL字符串中的双引号替换某些特定的单引号,但不是该字符串中的所有单引号。

EXEC procedureName 'param'eter1', 'parameter2'

在上面的示例中,我只想替换' param' eter1'中的单打引号。但是参数的开头和结尾的单引号保持不变。

使用下面的命令替换字符串中的所有单引号,它看起来像这样'''' eter1''这是不正确的。

sometext.Replace("'", "''")

我希望它看起来像这样:

EXEC procedureName 'param''eter1', 'parameter2'

另请注意,我已经知道使用SqlParameter是处理SQL参数中单引号的更好解决方案,但由于项目环境中的限制,我无法实现。

更新

在使用它们构建完整语句之前更改各个参数对我来说不是一个选项,因为我无法访问该代码。我的项目就像一个数据层,它接收来自其他应用程序的SQL字符串进行处理。

2 个答案:

答案 0 :(得分:0)

这是一个非常糟糕的主意。 SQL语法要求您完全转义文字中的单引号,因为它无法判断单引号是表示单引号还是意味着终止字符串文字。

考虑以下示例:

EXEC procedureName 'param ', ' eter1', 'parameter2'

您如何知道这是为了具有三个参数来进行过程调用还是只有两个?即使您知道此特定过程采用两个参数,您也无法确定中间部分是属于第一个还是第二个参数。

如果系统在构造完整语句之前从用户输入构造sql语句而不处理单引号,则可以非常轻松地使用它来通过sql injection攻击系统。

答案 1 :(得分:-1)

你可以这样做

var aStringBuilder = new StringBuilder(theString);
aStringBuilder.Remove(3, 2); // just find a position of single quotes 
aStringBuilder.Insert(3, "/""); // replace that position with " quotes using loop
theString = aStringBuilder.ToString();