oracle
  • asp-classic
  • named-parameters
  • 2009-07-16 24 views 5 likes 
    5

    現在、Oracleデータベースと対話している従来のASPプロジェクトで作業しています。私は安全にOracle PL/SQLスクリプトを呼び出し、ADOでパラメータを渡す方法を見つけようとしています。現在、解決策は、このような組み込み変数を手でSQLスクリプトを作成します:クラシックASPのADODBからパラメータ化されたOracleクエリを呼び出す

    strSQL = "SELECT field1, etc FROM my_table WHERE (field = '" & filter_value & "')" 
    

    これ、もちろん、醜いと安全でない、と虐待に開放されています。

    私がこれまでに(様々な非従来のASPベースのWebサイトから盗ま)したコードは次のようになります。

    dim strSQL, oConn, oCommand, oParam 
    set oConn = server.createobject("ADODB.Connection") 
    oConn.Open myConnString 
    
    strSQL = "SELECT field1, etc FROM my_table WHERE (field = :filter_field)" 
    
    dim oFilteredList 
    set oFilteredList = Server.CreateObject("ADODB.Command") 
    oFilteredList.ActiveConnection = oConn 
    oFilteredList.CommandText = strSQL 
    oFilteredList.CommandType = adCmdText 
    oFilteredList.NamedParameters = True 
    
    set oParam = oFilteredList.CreateParameter("filter_field", adVarChar, adParamInput, 10, filter_value) 
    oFilteredList.Parameters.Append oParam 
    
    set rsResults = oFilteredList.Execute 
    

    これはエラー「Parameterオブジェクトが正しく定義されていないが発生します。不一致または不完全な情報が提供されました。 "

    ADOから名前付きパラメータを使用してOracle/PL/SQLを呼び出す正しい方法は何ですか?実際のSQLコードはやや複雑で、SQLコマンド全体ではさまざまなパラメータが複数回使用されるため、名前付きパラメータを使用する必要があります。

    +0

    真= NamedParametersの行をコメントしてみて、それが助けかどうかを確認します。 – shahkalpesh

    +0

    Option Explicitを使用していて、あなたの "広告"定数にいくつかの種類のadovbs.incファイルが含まれていますか? – Funka

    +0

    私はNamedParametersプロパティの有無にかかわらず試しましたが、私はadovbs.incを含めています。私はいつも明示的にオプションを使う – Buzzrick

    答えて

    2

    filter_valueはどのように定義されていますか?それが文字列として宣言されていない場合や、パラメータの作成時に指定したとおりに10文字以上の文字列を割り当てた場合は、それに問題があります。

    さらに(および一部は私自身の参照用)、という名前のパラメータは、OraOLEDBで(すなわちADODB)を介してサポートされていません。

    Oracle® Provider for OLE DB Developer's Guide 11g Release 1 (11.1)を参照するか、 "コマンドのパラメータは、" previous versions(8iR3、9iの、9iR2を、10グラム、10gR2の)のいずれかのリンクを見出し従います

    コマンドパラメータ

    OracleのANSIを使用してSQLの場合、コマンド・テキスト内のパラメーター の前にコロンである が付いています。 ODBC SQLでは、パラメータは疑問符(?)で示される です。

    OraOLEDBは、入力、出力、およびPL/SQL ストアド・プロシージャとストアド 関数の入力および出力パラメータをサポート。 OraOLEDBは、SQL文の入力パラメータである をサポートしています。

    "注::OraOLEDBは、 位置結合だけをサポートしています。

    oFilteredList.NamedParameters = True 
    

    あなたの例の残りの部分では、Oracle 10gリリース2にかかわら示すので、私は正確にクエリを実行し、成功を持っていた:のOraOLEDBを使用した場合、これはあなたのクエリには何の関係を持つべきではない、と述べた

    あなたは接続文字列を表示しないので、私はそれが有効であると仮定する必要があります。行動はので、ここで私が正常に使用するものですが、そこのオプションに応じて異なることができます。

    `"Provider=OraOLEDB.Oracle;Data Source=TNSNAMES_ENTRY;User ID=XXXX;Password=YYYY;DistribTx=0;"` 
    
    関連する問題