Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ORA-01008:nicht alle Variablen gebunden, obwohl sie alle gebunden sind

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.