質問

私C#ます。純3.5.Iを生成しなければならないものT-SQLのinsertする実行後のリモートサーバーです。

例えば、配列の従業員:

new Employee[]
{
   new Employee { ID = 5, Name = "Frank Grimes" },
   new Employee { ID = 6, Name = "Tim O'Reilly" }
}

とい終わるstringの配列、このように:

"INSERT INTO Employees (id, name) VALUES (5, 'Frank Grimes')",
"INSERT INTO Employees (id, name) VALUES (6, 'Tim O''Reilly')"

いであるコードを作成し、挿入、発言と発言間の関係を明確に文字列になります。フォーマットな感じですね。どのように使用SqlCommand(いい このようになっがんの提供を組み合わせのコンテキストとパラメータ。

なだけで置き換えシングルクォーテーションを構築ん。

string.Format("INSERT INTO Employees (id, name) VALUES ({0}, '{1}')",
    employee.ID,
    replaceQuotes(employee.Name)
    );

どうすれば良い関心がうか。元のデータがないために多くの前提をアップデート。

編集:しみやすく心のこもった点がこの場合においてSqlConnectionまたはその直接接続SQLサーバーです。この特定のアプリのニーズをsqlステートメントやキューにて実行されるか-その他うスタイルを使用SqlCommand.パラメータ。AddWithValue()

役に立ちましたか?

解決

パラメータ化されたコマンドを使用します。リモートサーバーにもパラメーターを渡し、それをSQL Serverに呼び出します。SQL自体とパラメーター値の区別は維持されます。

データをコードとして扱わない限り、大丈夫です。

他のヒント

次のようにSqlCommandオブジェクトを作成します:

SqlCommand cmd = new SqlCommand(
        "INSERT INTO Employees (id, name) VALUES (@id, @name)", conn);

SqlParameter param  = new SqlParameter();
param.ParameterName = "@id";
param.Value         = employee.ID;

cmd.Parameters.Add(param);

param  = new SqlParameter();
param.ParameterName = "@name";
param.Value         = employee.Name;

cmd.Parameters.Add(param);

cmd.ExecuteNonQuery();

引用符の置換関数を次のように修正します。

void string replaceQuotes(string value) {
     string tmp = value;
     tmp = tmp.Replace("'", "''");
     return tmp;
}

乾杯!

Hmmいんするのに使用パラメータ化された問い合わせやすいです。かがい、それぞれのsql文へのリモートサーバ?しているタイプのサービスのようなwebサービスを受け入れ、任意のSqlコマンドまたはクライアントアプリにDBを直接?

場合において何らかのプロキシを利用しているただし、アクセスインターネットサニタイズのデータをクライアントがあり、ハッカーがバイパスをアプリののサービスです。その場合などのケ勧告には、データをXMLとして例えばあ形式を選択(JSON、バイナリーなど)の構築とSQL直前に実際に次のコマンドを実行します.

インジェクションを回避するには、データをリモートサーバー(おそらくXML)に送信してから、リモートサーバーで適切なデータ型に変換し直し、パラメーター化されたクエリまたはストアドプロシージャで使用する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top