2016-05-05 9 views
1

国際化の取り組みの一環として、string.Format(...)の使用方法をリファクタリングして、SQLクエリの書式設定時にstring.Format(CultureInfo.InvariantCulture, ...)オプションを使用する必要があります。これは、さまざまな言語文化環境下で実行されているときにコードが有効なSQLを生成し続けるようにするためです。たとえば、UIの文字列を書式設定するときなど、string.Format(...)の使用法は変更されません。高度なC#リファクタリング

たとえば、次のコードは、string.Format(CultureInfo.InvariantCulture, ...)を使用するように更新する必要があります:

string sql; 

if(somethign) 
{ 
    sql = string.Format("SELECT {0} FROM {1}", column, table); 
} 
else 
{ 
    sql = string.Format("SELECT {0} FROM {1}", column2, table2); 
} 

db.Query(sql); 

残念ながら、データベース・アクセスのこのパターンは、コードベースで数千回を使用して何の簡単な検索と置換コマンドがありません私はここで使うと思います。 find/replaceのアプローチは、結果の文字列がdb.Query()のパラメータとして使用されるケースのみを分離するために十分に高度化する必要があります。

ResharperのSearch with Pattern(私はそれを一度も使用していない)、コードをインテリジェントにリファクタリングするRoslynベースのツール(複雑すぎるようなもの)、Unixコマンドラインツールの組み合わせなどを考えています。

私は大いに自動化できるという条件で、他のより重要なリファクタリング手法にもオープンしています。

このコードを国際化するには、どのような方法が推奨されますか?

+1

Roslynはこれに完全に適していて、誠実に書くのは難しいものではありません。 ['MSBuildWorkspace'](https:/ /)と組み合わせた[' SyntaxRewriter'](https://joshvarty.wordpress.com/2014/08/15/learn-roslyn-now-part-5-csharpsyntaxrewriter/) /joshvarty.wordpress.com/2014/09/12/learn-roslyn-now-part-6-working-with-workspaces/)を使用してソリューションを読み込み、その中のすべての構文ツリーを書き直します。 Roslynの背景情報については、私が書いた論文を提供しています:https://www.dropbox.com/s/rc9edahndlog0je/MainPaper.pdf?dl=0 –

+1

これは私に[little bobby tables](https:///xkcd.com/327/)。 – Xiaoy312

+0

これをリファクタリングする場合は、ストアドプロシージャにリファクタリングしてください。 – drz

答えて

-3

C#の文字列補間を使用できます。クエリは次のようになります:

私は文字列補間のデフォルトが現在の文化だと思います。

一方、SQLインジェクションに脆弱である可能性があるので、あなたのコードでクエリを構築することは推奨しません。

+0

有用な回答ではありませんか? :( – alltej