Передача параметризованного списка запросов из int возвращает ошибку ora-01722 - PullRequest
0 голосов
/ 15 мая 2011

Использование поставщика oledb.Запрос выглядит примерно так:

SELECT appid 
  FROM table 
 WHERE response_id IN (?)

Я беру массив int и отправляю его методу, который добавляет разделитель запятой между значениями массива и возвращает строку.Эта строка затем отправляется в качестве параметра.

Это прекрасно работает, если у меня есть одно значение для прохода, но когда я отправляю два значения, я получаю ошибку ORA-01722.

Я пытался просмотреть таблицу v_$sql, чтобы увидеть, что выполняется, но он не показывает запросы, выполненные моей страницей.Я могу видеть только то, что выполнил через жабу, хотя в обоих случаях я использую один и тот же логин.Не уверен, есть ли другие таблицы, которые хранят данные 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;
    }
}

Ответы [ 2 ]

2 голосов
/ 15 мая 2011

К сожалению, вы не можете просто поставить строку через запятую как значение IN. Что вы можете сделать, это автоматически сгенерировать переменную связывания для каждого элемента массива и связать каждое значение, например, так:

select appid from table where response_id in (:id1, :id2, :id3)
0 голосов
/ 15 мая 2011

Какой драйвер вы используете для подключения к Oracle? Вот два разных решения odp.net: http://forums.oracle.com/forums/thread.jspa?threadID=892457&tstart=810

edit: я вижу, что вы используете провайдера oledb. Я предполагаю, что ограничивает возможности? (Я никогда не использовал этого провайдера, поэтому я не знаю). Может пора переключаться?

...