int型

2017-08-14 15 views
0

私はいくつかのTruesFalsesで、次のようなSQL文字列を持っているとboolsを交換することができません:int型

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

私はこれをしようとすると、私は1と0を持つすべての偽とすべての真を交換したいしかし、 :

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

...それだけではない、すべてのそれらの... Falsesの一部を削除します。例えば、私はこれで終わる:

INSERT INTO SystemRules (Col1, Col2, Col3, Col4, Col5) 
Values (0,False,1,0,False) 
私が期待したもの

このでした:

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

:それでは、私は(ちょうど1枚以下で示す)の代わりに正規表現を試してみてください
INSERT INTO SystemRules (Col1, Col2, Col3, Col4, Col5) 
Values (0,0,1,0,0) 

その特定の行がこのエラーで爆発する: parsing ",True)" - Too many)'s.

すべてを置き換える最も効率的な方法は何ですか? 1sと0を持つSQL文のTruesとFalses?私はいつもstring.Replace()がC#でグローバルに置き換えられているのを見つけましたが、なぜそれが欠落しているのか困惑しています。そこには空白がありません、私は三重チェックしました。これの1つの証拠は、私が2回目の上記の一連の置換を実行すると、がストラッグラーを置き換えるということです。なぜ初めてではないのですか? C#replaceは本当にグローバルではありませんか?ありがとうございました。

+1

で行う1することができますcol1Value == "True"?1:0' – ASpirin

+3

あなたの '.Replace()'引数のどれもが前置詞なしで 'False'を許さないので、最初の' False'を '0'でも置き換える方法はわかりませんコンマ。 – itsme86

+2

問題の再現を試みても、結果が得られません。問題のあなたの説明は正確ではありません:http://ideone.com/FzUE6c – JLRishe

答えて

3

はエスケープする必要があるため、Regex.Replaceでエラーが発生します。文字列があるとしてSQLを操作し、

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

しかし:

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

あなたはカンマ/括弧は\\bアンカーを扱う簡素化することができます:バックスペース(通常のC#の文字列には2つのバックスペース)を配置することで、この問題に対処します非常に危険なアイデア(why?)。代わりに、パラメータ化されたSQLを使用するようにコードをリファクタリングする必要があります(how?)。 '0'か?:正規表現またはを置く必要はありません

+0

ありがとう! SQLインジェクションについて心配する必要はありませんが、これはユーザー入力がないバックオフィスアプリです。 – HerrimanCoder

0

「真は、」 は、それは非常に単純な方法SQLビル `col1Value中にそれをしないのはなぜ

string s="INSERT INTO SystemRules (Col1, Col2, Col3, Col4, Col5)Values (False,False,True,False,False)"; 
     s=s.Replace("False", "0").Replace("True", "1"); 
関連する問題