1

アプリケーションが生成する特定の値のプレースホルダーを使用してSQL文字列をユーザーが入力できるようにするアプリケーションがあります。アプリケーションはプレースホルダーを値に置き換え、さまざまなデータベースバックエンドを介してSQL文字列を実行します。

ODBCバックエンドの場合、SQL strinでSQLExecDirect()を呼び出します。これは、通常のクエリではうまく機能しますが、パラメーターを使用するストアドプロシージャでは失敗します。

このメカニズムを拡張してストアドプロシージャをサポートする簡単な方法はありますか?SQLをどのように書く必要があるか?

私が今考えることができる唯一のことは、SQL文字列の解析を開始し、「呼び出し」が含まれている場合はSQLBindParameter()をn回呼び出すことです。ただし、SQLの解析には注意が必要です。

何か案は ?

動作するSQLの例:SELECT columnA from foo where columnB ='%placeholder'

動作しないSQL:CALL StoredFoo('%placeholder')

4

1 に答える 1

3

ストアド プロシージャ (ODBC) の呼び出し方法:

プロシージャを RPC として実行するには

  1. ODBC CALL エスケープ シーケンスを使用する SQL ステートメントを作成します。このステートメントは、各入力、入出力、および出力パラメーター、およびプロシージャーの戻り値 (存在する場合) に対してパラメーター・マーカーを使用します。

    {? = CALL procname (?,?)}

  2. 各入力、入出力、および出力パラメーター、およびプロシージャーの戻り値 (存在する場合) に対して SQLBindParameter を呼び出します。

  3. でステートメントを実行しSQLExecDirectます。

それ以外の場合は、手順を通常のバッチ (RPC 呼び出しではなく) として実行する必要があります。バッチを実行する必要があります:

EXEC procname @param1, @param2, @param3...;
于 2010-08-17T17:39:52.830 に答える