Параметр Oracle SQL не ограничивается должным образом

Итак, моя ситуация просто включает источник данных и запрос Oracle SQL в ASP.NET.

У меня есть следующий источник данных, определенный в файле aspx.

<asp:SqlDataSource ID = "DataSourcePFEP" runat = "server"
    ConnectionString = "<%$ ConnectionStrings:DALI %>" ProviderName = "Oracle.ManagedDataAccess.Client" CancelSelectOnNullParameter = "false">
    <SelectParameters>
        <asp:SessionParameter Name = "PlantID" SessionField = "PlantID" />
        <asp:QueryStringParameter Name = "ProductionLine" QueryStringField = "Line" ConvertEmptyStringToNull = "true" />
    </SelectParameters>
</asp:SqlDataSource>

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

(не включая полный запрос, поскольку он длинный и отлично работает без этого предложения или с заменой :ProductionLine на любую строку)

(:ProductionLine IS NULL OR PKHD.PRVBE = :ProductionLine)

Моя первая проблема заключается в том, что это предложение WHERE, похоже, не работает, когда отсутствует параметр строки запроса. Это работает, если параметр запроса установлен как «?Line=Something», но без параметра запроса я вообще не получаю результатов. Но разве часть «OR :ProductionLine IS NULL» не должна позаботиться об этом?

Еще одна проблема, с которой я столкнулся, заключается в том, что мой полный запрос включает еще один параметр: PlantID. Вы можете видеть, что он уже определен в разделе SelectParameters моего SqlDataSource. И если я использую оба параметра в своем запросе, я получаю ошибку ORA-01008, сообщающую, что у меня не все значения привязаны. Но если включен только один параметр, то поочередно работают оба. Итак, очевидно, что оба параметра привязаны правильно, но если я использую оба одновременно, то вдруг это не сработает?

Есть ли вероятность того, что ProductionLine не интерпретируется и не считает это двумя отдельными привязками. Не могли бы вы проверить, сработает ли NVL(:ProductionLine, PKHD.PRVBE) = PKHD.PRVBE?

Gnqz 25.03.2024 16:41

Спасибо за совет, к сожалению, даже при этом я все еще получаю ошибку ORA-01008.

Dinosbacsi 28.03.2024 11:15
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ну, я заставил его работать, но довольно странным образом.

Если я использую и QueryStringParameter, и SessionParameter, то он работает «правильно».

<asp:SqlDataSource ID = "DataSourcePFEP" runat = "server"
ConnectionString = "<%$ ConnectionStrings:DALI %>" ProviderName = "Oracle.ManagedDataAccess.Client" CancelSelectOnNullParameter = "false">
<SelectParameters>
    <asp:SessionParameter Name = "PlantID" SessionField = "PlantID" />
    <asp:QueryStringParameter Name = "ProductionLine" QueryStringField = "Line" ConvertEmptyStringToNull = "true" />
    <asp:SessionParameter Name = "ProductionLine" SessionField = "ProductionLine" />
</SelectParameters>
</asp:SqlDataSource>

Для этого мне нужно установить для Session["ProductionLine"] строку запроса в PageLoad. Но если я буду использовать только SessionParameter, то это тоже не сработает. По какой-то причине, если я использую оба, то это как-то работает.

Я не уверен, почему, это кажется дурацким обходным путем, но я просто оставлю его здесь. Возможно, кто-то сможет использовать его, чтобы выяснить реальную проблему или, по крайней мере, обойти ее, как это делаю я.

Другие вопросы по теме