Oracle
 sql >> Base de données >  >> RDS >> Oracle

ORA-01008 :toutes les variables ne sont pas liées, alors qu'elles sont toutes liées

Cette erreur se produit souvent dans le cas d'ODP.NET. Le problème réside dans le comportement par défaut d'OracleCommand lorsqu'il s'agit de faire correspondre les paramètres de requête aux paramètres fournis. Par défaut la position la méthode est utilisée à la place de nom méthode. En pratique, chaque paramètre ajouté à la commande sera pris tel quel, quel que soit son nom, et si vous référencez un paramètre deux fois dans le texte de la requête, vous devez ajouter sa valeur deux fois !

Ce comportement par défaut peut être remplacé en définissant BindByName à true sur OracleCommad mais en cas de SqlDataSource vous n'y avez pas accès et vous devez fournir des valeurs plusieurs fois dans le bon ordre :

<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>

(J'espère n'en avoir raté aucun)

Comme alternative, vous pouvez envisager de créer votre propre fournisseur dérivé d'ODP.NET avec BindByName ajusté.