ADODB 経由で Postgres データベース (8.2) と通信する従来の asp-vba コードをクリーンアップしています。現時点では、SQL ステートメントの文字列構築を使用しています。明らかに、SQL インジェクションを回避するために準備済みステートメントを使用したいと考えています。
名前付き変数でこれを行う方法がわかりません。「?」で成功しただけです。演算子を使用し、SQL で定義されている順序でパラメーターを追加します。これは私の状況では良くありません[1]。
? を使用して、いくつかの簡単なパラメーター置換を行うことができました。演算子と CreateParameter(...):
var oCmd = Server.CreateObject("ADODB.Command");
oCmd.CommandText = "SELECT * FROM sometable WHERE somefield = ? AND another = ?";
oCmd.Parameters.Append oCmd.CreateParameter("", adVarChar, adParamInput, 50, "val1")
oCmd.Parameters.Append oCmd.CreateParameter("", adVarChar, adParamInput, 50, "val2")
しかし、私が名前でそれをやろうとすると、うまくいきません:
var oCmd = Server.CreateObject("ADODB.Command");
oCmd.CommandText = "SELECT * FROM sometable WHERE somefield = @a AND another = @b";
oCmd.Parameters.Append oCmd.CreateParameter("@b", adVarChar, adParamInput, 50, "val2")
oCmd.Parameters.Append oCmd.CreateParameter("@a", adVarChar, adParamInput, 50, "val1")
実際にはODBCの失敗である可能性があるというメモがいくつかあります(http://www.codeproject.com/Tips/231217/Parameters-SqlCommand-vs-OledbCommand-and-OdbcComm)。誰かがこれまたは他のオプションを回避する方法を知っていますか?
[1]残念ながら使えない?? ? パラメータを順番に定義します。コードは、値を順不同でサブする従来の ORM に既にラップされています。名前で送信できれば、これをきれいに行うことができます。
ヘルプやポインタをいただければ幸いです。