Ten błąd często występuje w przypadku ODP.NET. Problem polega na domyślnym zachowaniu OracleCommand, jeśli chodzi o dopasowanie parametrów zapytania do podanych parametrów. Domyślnie pozycja metoda jest używana zamiast name metoda. W praktyce każdy parametr dodany do polecenia będzie traktowany jako taki, niezależnie od nazwy, a jeśli odwołujesz się do parametru dwa razy w tekście zapytania, musisz dwukrotnie dodać jego wartość!
To domyślne zachowanie można zmienić, ustawiając BindByName
na true
na OracleCommad
ale w przypadku SqlDataSource
nie masz do niego dostępu i musisz podać wartości wielokrotnie w odpowiedniej kolejności:
<asp:SqlDataSource ID="EDTDS" runat="server" ConnectionString="<%$ ConnectionStrings:Camstar %>" ProviderName="<%$ ConnectionStrings:Camstar.ProviderName %>" SelectCommand="select ..."
<SelectParameters>
<asp:SessionParameter ConvertEmptyStringToNull="False" Name="startDate" SessionField="startDate" />
<asp:SessionParameter ConvertEmptyStringToNull="False" Name="startDate" SessionField="startDate" />
<asp:SessionParameter ConvertEmptyStringToNull="False" Name="endDate" SessionField="endDate" />
<asp:SessionParameter ConvertEmptyStringToNull="False" Name="equipID" SessionField="equipID" />
<asp:SessionParameter ConvertEmptyStringToNull="False" Name="startDate" SessionField="startDate" />
<asp:SessionParameter ConvertEmptyStringToNull="False" Name="endDate" SessionField="endDate" />
<asp:SessionParameter ConvertEmptyStringToNull="False" Name="equipID" SessionField="equipID" />
<asp:SessionParameter ConvertEmptyStringToNull="False" Name="venmod" SessionField="venmod" />
<asp:SessionParameter ConvertEmptyStringToNull="False" Name="handType" SessionField="handType" />
<asp:SessionParameter ConvertEmptyStringToNull="False" Name="handID" SessionField="handID" />
<asp:SessionParameter ConvertEmptyStringToNull="False" Name="operID" SessionField="operID" />
</SelectParameters>
</asp:SqlDataSource>
(Mam nadzieję, że nie przegapiłem żadnego)
Jako alternatywę możesz rozważyć utworzenie własnego dostawcy wywodzącego się z ODP.NET wwith BindByName
dostosowane.