0

oledb プロバイダーの使用。クエリは次のようなものです。

SELECT appid 
  FROM table 
 WHERE response_id IN (?)

int 配列を取得し、配列値の間にコンマ区切り記号を追加して文字列を返すメソッドに送信します。この文字列は、パラメータとして送信されます。

渡す値が 1 つの場合は問題なく動作しますが、2 つの値を送信するとORA-01722エラーが発生します。

テーブルを見て何が実行されているかを確認しようとしましたv_$sqlが、自分のページで実行されたクエリが表示されません。どちらの場合も同じログインを使用しているにもかかわらず、toad を介して実行したものしか見ることができません。SQLデータを格納する他のテーブルがあるかどうかはわかりません。

文字列ビルダーは次のとおりです。

public string intArrayToString(int[] array)
{
    if (array != null)
    {
        string delimiter = ",";

        if (array.Length > 0)
        {
            StringBuilder builder = new StringBuilder();

            builder.Append(array[0]);
            for (int i = 1; i < array.Length; i++)
            {
                builder.Append(delimiter);
                builder.Append(array[i]);
            }                    
            return builder.ToString();
        }
        else
        {
            return string.Empty;
        }
    }
    else
    {
        return null;
    }
}
4

2 に答える 2

2

IN残念ながら、値としてカンマ区切りの文字列を入力することはできません。実行できることは、次のように、配列要素ごとにバインド変数を自動的に生成し、各値をバインドすることです。

select appid from table where response_id in (:id1, :id2, :id3)
于 2011-05-14T22:19:31.580 に答える
0

Oracle に接続するためにどのドライバーを使用しますか? ここで 2 つの異なる odp.net ソリューション: http://forums.oracle.com/forums/thread.jspa?threadID=892457&tstart=810

編集: oledb プロバイダーを使用しているようです。私はそれが可能性を制限すると思いますか?(私はそのプロバイダーを使用したことがないのでわかりません)。そろそろ切り替え時かも?

于 2011-05-15T08:26:16.680 に答える