Questo errore si verifica spesso in caso di ODP.NET. Il problema risiede nel comportamento predefinito di OracleCommand quando si tratta di far corrispondere i parametri di query ai parametri forniti. Per impostazione predefinita, la posizione viene utilizzato il metodo al posto di nome metodo. In pratica ogni parametro aggiunto al comando verrà preso così com'è indipendentemente dal nome, e se fai riferimento a un parametro due volte nel testo della query, devi aggiungere il valore per esso due volte!
Questo comportamento predefinito può essere ignorato impostando BindByName
su true
su OracleCommad
ma in caso di SqlDataSource
non hai accesso ad esso e devi fornire i valori più volte nell'ordine corretto:
<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>
(spero di non averne perso nessuno)
In alternativa puoi considerare di creare il tuo Provider derivato da ODP.NET con BindByName
aggiustato.