Tato chyba se často vyskytuje v případě ODP.NET. Problém spočívá ve výchozím chování OracleCommand, pokud jde o shodu parametrů dotazu s dodanými parametry. Ve výchozím nastavení pozice namísto name je použita metoda metoda. V praxi bude každý parametr přidaný do příkazu brán tak, jak je, bez ohledu na název, a pokud na parametr odkazujete dvakrát v textu dotazu, musíte pro něj přidat hodnotu dvakrát!
Toto výchozí chování lze přepsat nastavením BindByName
true
na OracleCommad
ale v případě SqlDataSource
nemáte k němu přístup a musíte zadat hodnoty vícekrát ve správném pořadí:
<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>
(Doufám, že jsem žádné nevynechal)
Jako alternativu můžete zvážit vytvoření vlastního poskytovatele odvozeného z ODP.NET wwith BindByName
upraveno.