1

多くの ADO 作業を含むアプリケーションを継承しましたが、作成された挿入/更新ヘルパー メソッドは void を返します。また、データの更新/挿入が実際に行われないという問題も多数発生しています。私の目標は、それらすべてを更新して影響を受ける行をチェックし、結果に応じてそれに応じて行動することですが、当分の間、問題の原因となっている可能性のあるものを見つけるために、サーバーに対して呼び出された SQL ステートメントとその数をログに記録したいと思いました。ステートメントによって影響を受ける行の数。

これは私が試みている声明です:

 SqlCommand com = new SqlCommand(String.Format("'INSERT INTO
     SqlUpdateInsertHistory(Statement, AffectedRows) VALUES (''{0}'', {1});'",
     statement.Replace("'", "''"), rows), con);

しかし、渡されているSQLのどこかで常に壊れているようです(一重引用符の場合もありますが、他の文字も同様に発生する可能性があると思います.

挿入するステートメント文字列を準備する安全な方法はありますか?

4

2 に答える 2

2

あなたがやっていることを完全に変更せずに、この質問に対する解決策を正しく提案することはできません. あなたは現在、SQL インジェクションに対して無防備です。これがローカルアプリケーションであっても、プレイしたい方法を練習してください。

using (SqlCommand com = new SqlCommand("INSERT INTO SqlUpdateInsertHistory(Statement, AffectedRows) VALUES (@Statement, @AffectedRows)", con))
{
    com.Parameters.AddWithValue("@Statement", statement);
    com.Parameters.AddWithValue("@AffectedRows", rows);

    com.ExecuteNonQuery();
}
于 2013-11-01T18:54:35.940 に答える
0

SQL Server プロファイラーを試しましたか? それはすでに書かれており、クエリなどを記録しています。

他の誰かがこれを試して、ここでまともな答えをたくさん得ました。

于 2013-11-01T18:49:05.197 に答える