Итак, моя ситуация просто включает источник данных и запрос 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, сообщающую, что у меня не все значения привязаны. Но если включен только один параметр, то поочередно работают оба. Итак, очевидно, что оба параметра привязаны правильно, но если я использую оба одновременно, то вдруг это не сработает?
Спасибо за совет, к сожалению, даже при этом я все еще получаю ошибку ORA-01008.
Ну, я заставил его работать, но довольно странным образом.
Если я использую и 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, то это тоже не сработает. По какой-то причине, если я использую оба, то это как-то работает.
Я не уверен, почему, это кажется дурацким обходным путем, но я просто оставлю его здесь. Возможно, кто-то сможет использовать его, чтобы выяснить реальную проблему или, по крайней мере, обойти ее, как это делаю я.
Есть ли вероятность того, что ProductionLine не интерпретируется и не считает это двумя отдельными привязками. Не могли бы вы проверить, сработает ли
NVL(:ProductionLine, PKHD.PRVBE) = PKHD.PRVBE
?