Dieser Fehler tritt häufig bei ODP.NET auf. Das Problem liegt im Standardverhalten von OracleCommand, wenn es darum geht, Abfrageparameter mit bereitgestellten Parametern abzugleichen. Standardmäßig die Position Methode wird anstelle von Name verwendet Methode. In der Praxis wird jeder Parameter, der dem Befehl hinzugefügt wird, so genommen, wie er ist, unabhängig vom Namen, und wenn Sie einen Parameter zweimal im Abfragetext referenzieren, müssen Sie den Wert dafür zweimal hinzufügen!
Dieses Standardverhalten kann durch Setzen von BindByName
überschrieben werden auf true
auf OracleCommad
aber im Fall von SqlDataSource
Sie haben keinen Zugriff darauf und müssen die Werte mehrmals in der richtigen Reihenfolge angeben:
<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>
(Ich hoffe, ich habe keine übersehen)
Als Alternative können Sie erwägen, Ihren eigenen von ODP.NET abgeleiteten Provider mit BindByName
zu erstellen angepasst.