ORA-01722: неверный номер при выполнении запроса из VB.NET, но не SQL Developer - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть следующий код в приложении VB.NET, который заполняет данные:

sql = "SELECT *
       FROM REQUESTS
       WHERE VAL IN ( :pValList ) 
       AND STATUS NOT IN (0, 2, 9, 10)"

da = New OracleDataAdapter(sql, conn)
da.SelectCommand.BindByName = True
da.SelectCommand.Parameters.Add(New OracleParameter("pValList", pValList))
da.Fill(dsData, "RequestHistory")

Однако я получаю сообщение об ошибке неверного номера, вызванное этой строкой:

WHERE VAL IN ( :pValList )

ValList на самом деле является строкой, такой как 12566, 13234, 244555, однако строка создается как допустимый SQL, и, если я возьму эту строку и запущу ее непосредственно в SQL Developer, возврат не вызывает проблем. Кроме того, если я удаляю параметр из своего кода VB.NET и использую те же значения, но жестко запрограммированные, он работает правильно.

У меня есть код в другом месте, который ссылается на ту же таблицу и столбец, что не вызывает проблем, например ::

SELECT *
FROM REQUESTS
WHERE VAL = :pVal

Что VB.NET (или ODP.NET) делает с параметром, который приводит к тому, что он вводится как «недопустимое число»?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

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

SELECT *
       FROM REQUESTS
       WHERE VAL IN ('12566, 13234, 244555') 
       AND STATUS NOT IN (0, 2, 9, 10)

И эти цитаты выдают ошибку ... Вы можете избежать этого, используя SP или плохо выглядящие и не проиндексированные конструкции, такие как:

SELECT *
       FROM REQUESTS
       WHERE ',12566,13234,244555,' like '%,'||val||',%'
       AND STATUS NOT IN (0, 2, 9, 10)
0 голосов
/ 09 апреля 2019

У вас неверный пробел после имени параметра "pValList "

sql = "SELECT *
   FROM REQUESTS
   WHERE VAL IN ( :pValList ) 
   AND STATUS NOT IN (0, 2, 9, 10)"

da = New OracleDataAdapter(sql, conn)
da.SelectCommand.BindByName = True
da.SelectCommand.Parameters.Add(New OracleParameter("pValList", pValList))
da.Fill(dsData, "RequestHistory")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...