0

以前にそれを行ったことがありますが、この場合insert into table、ターゲット テーブルの列の値が別のクエリの結果として得られるクエリがあります。それを持っていると、私parametarized queryのが正しい方法でフォーマットされているかどうかわかりません。

Sql Injection修正前の元のクエリは次のとおりです。

cmd.CommandText += "insert into controlnumber (controlnumber, errorid) 
values ('" + ControlNumber + "', (select errorid from error where 
errordescription = '" + ErrorDescription + "' and errortype = '" + 
ErrorType + "' + and applicationid = " + ApplicationID + " and statusid =
" + StatusID + " and userid = " + UserID + " and errortime = '" + 
ErrorTime + "');";

これは、修正を試みた後のクエリですSql Injection

cmd.CommandText = "insert into ControlTable(ControlNumber, ErrorID)
values (@ControlNum, (select errorid from error where errordescription = 
@ErrorDescription and errortype = @errorType and applicationid = 
@ApplicationID and statusid = @StatusID and userid = @UserID and 
errortime = @ErrorTime)"

ここにパラメータを追加します。

.....

command.CommandType = CommandType.Text
command.Parameters.AddWithValue("@ErrorDescription ", ErrorDesc);
command.Parameters.AddWithValue("@ControlNum", cntNumber);
command.Parameters.AddWithValue("@errorType",ErrorType);
command.Parameters.AddWithValue("@ApplicationID",AppID);
command.Parameters.AddWithValue("@StatusID",StatusID);
command.Parameters.AddWithValue("@UserID",UserID);

....私CommandTextのが正しい方法でフォーマットされているかどうか疑問に思っています。

ありがとう

4

1 に答える 1

0

これを試して:

cmd.CommandText = "insert into ControlTable(ControlNumber, ErrorID)
select @ControlNum, errorid from error where errordescription = 
@ErrorDescription and errortype = @errorType and applicationid = 
@ApplicationID and statusid = @StatusID and userid = @UserID and 
errortime = @ErrorTime)"

INSERT INTO SELECT FROM を使用する場合、キーワード VALUES は使用しません。構文は次のとおりです。

INSERT INTO TABLE(columns) SELECT ... FROM TABLE2
于 2015-08-11T15:57:21.557 に答える