0

従来のデータベース アクセス レイヤーが原因で、ストアド プロシージャのパラメーター用に Sql ステートメントを動的に作成する必要がありました。

var p1 = Encoding.ASCII.GetString(p1).Replace("'", "''").Replace("\n", " ");
var p2 = Encoding.ASCII.GetString(p2).Replace("'", "''").Replace("\n", " ");
.....
var sql = string.Format("exec storedprocedure @p1='{0}', @p2='{1}', @p3='{2}', ....", 
    p1, p2, p3, ...);

現在、文字列をASCII文字列に変換した後、空のスペースに置き換えます'。他に何をする必要がありますか?いくつかの事実により、使用できず、文字列を連結する必要がありました。''\n'SqlParamter

4

1 に答える 1

2

しないでください。

動的入力を持つすべてのクエリで型付きパラメーターを使用します。ADO のすべてのフレーバーには、型付きパラメーターと、太陽の下のすべてのデータベースの ADO.NET プロバイダーがあります。独自の SQL インジェクション防止を実行しようとすると、うまくいきません。

于 2013-03-28T04:17:14.453 に答える