不可能用ints [封闭]

问题描述 投票:0回答:1
i具有以下sql字符串,有几个
Trues

Falses

INSERT INTO SystemRules (Col1, Col2, Col3, Col4, Col5) 
Values (False,False,True,False,False)

我想用0代替所有false,并用1个替换为1。但是,当我尝试一下时:

sql = sql.Replace(",True,", ",1,").Replace(",True)", ",1)").Replace(",False,", ",0,").Replace(",False)", ",0)");

...它只能消除伪造的false ...不是全部。例如,我最终得到了:

INSERT INTO SystemRules (Col1, Col2, Col3, Col4, Col5) Values (0,False,1,0,False) 我期望的是: INSERT INTO SystemRules (Col1, Col2, Col3, Col4, Col5) Values (0,0,1,0,0)

然后,我尝试反对言论(下面仅显示1件):

sql = Regex.Replace(sql, ",True)", ",1)");

特定的线路与此错误爆炸:
parsing ",True)" - Too many )'s.

用1s和0s替换SQL语句中所有Trues和Falses的最有效方法是什么?我总是在C#中找到string.replace()以替换全球,我为为什么缺少一些而感到困惑。那里没有空间,我已经进行了三次检查。一个证明是,如果我在第二次上方运行一系列替换,则它会替换stragglers
。为什么不第一次? C#真的不是全局吗?

您会使用

replace

出错,因为Regex.Replace是一个需要逃脱的金属杆菌。放置一个backspace(常规C#字符串的两个背面)将解决此问题:

)

c#
1个回答
3
投票
sql = Regex.Replace(sql, ",True\\)", ",1\\)");

锚来简化逗号/括号处理:

\\b
,无论如何,将SQL作为字符串操纵是一个非常危险的想法(Why Why?

)。您应该重构代码以使用参数化的SQL(
如何?
)。

没有必要将正则或“ true”放置 
可以以非常简单的方式完成

sql = Regex.Replace(sql, "\\bTrue\\b", "1");
    

© www.soinside.com 2019 - 2025. All rights reserved.