2011-10-31 17 views
1

引用符付きの文字列のテキストを引用する簡単な解決策の後です。例えば特定の単語を一重引用符で囲みます。

DATEDIFF(Minutes, Lead.WhenCreated, @Today) 

ソース文字列がすでにトークンのために引用符を持っている場合は、変更が行われるべきではない

DATEDIFF(Minutes, Lead.WhenCreated, '@Today') 

に更新する必要があります。文字列には複数のトークンがあるかもしれませんし、トークンの値がどうなるか分かりません。@文字で始まるとしか言いようがありません。

私の環境は、Visual StudioのC#で2008

は、いくつかは助けることができる願っています。

ありがとうございました。

答えて

0

パターン:

(?<!')(@\w+) 

交換:

'$1' 
+0

Alexeyに感謝します。これはFailedDevの回答に加えて動作します。 – dubs

1
resultString = Regex.Replace(subjectString, @"(@\b\w+\b)", "'$1'"); 

これを使用できます。 @で始まるすべての単語を検索し、引用符を追加します。

編集:

resultString = Regex.Replace(subjectString, @"((?<!')@\b\w+\b)", "'$1'"); 

すでに引用符で囲まれた文字列を考慮するため。

+0

乾杯は、御馳走を動作します。 – dubs

+0

ソース文字列に引用符が含まれている場合(たとえば、DATEDIFF(Hours、Lead.WhenCreated、 '@Today'))、置換はまだ行われます。つまり、結果はDATEDIFF(Hours、Lead.WhenCreated、 @Today '') – dubs

+0

@JDubs更新された回答を参照してください。 – FailedDev

0

C#コードでSQL文を作成してから、パラメータを自分で置き換えているようです。この方法を使用する方がよいでしょう。

DataReader rdr; 
using (SqlConnection con = new SqlConnection(MY_CONNECTIONSTRING) 
{ 
    con.Open(); 
    string sql = "SELECT DATEDIFF(Minutes, Lead.WhenCreated, @Today) FROM tbl"; 
    using (SqlCommand cmd = new SqlCommand(sql, con)) 
    { 
     cmd.Parameters.AddWithValue("@Today", datDateValue); 
     rdr = cmd.ExecuteReader(); 
    } 
} 

この方法は悪意のあるSQLインジェクションに対して安全です。

This is an article addressing the issue in C#

+0

こんにちはEl Ronnoco、私はあなたのポイントを理解しますが、SQLはスケジューラ(すなわち、不定の時間)で実行されるので、すべての置換はデータベースサーバによって実行される - したがって、SQLが実行されるまで実際の値はわかりません。ポイントはSQLインジェクションについて取り上げましたが、私はこれに精通していますが、あなたのリンクもチェックします。 – dubs

+0

@J Dubs私はあなたのアプリケーションがおそらく本質的に注射安全であると考えていましたが、あなたのコードは他の誰かがWebServiceやWebアプリケーションにコピーしたり、あなたがそれを知る前にbing-bada-boom 、[little bobby tables](http://xkcd.com/327/)はあなたのバックエンドを捨てています:) –

関連する問題