sql >> Base de Datos >  >> RDS >> Oracle

ORA-01008:no todas las variables están vinculadas, cuando todas están vinculadas

Este error ocurre a menudo en el caso de ODP.NET. El problema radica en el comportamiento predeterminado de OracleCommand cuando se trata de hacer coincidir los parámetros de consulta con los parámetros proporcionados. Por defecto la posición se utiliza el método en lugar de name método. En la práctica, cada parámetro agregado al comando se tomará tal cual, independientemente del nombre, y si hace referencia a un parámetro dos veces en el texto de consulta, ¡entonces debe agregar el valor dos veces!

Este comportamiento predeterminado se puede anular configurando BindByName a true en OracleCommad pero en el caso de SqlDataSource no tiene acceso a él y necesita proporcionar valores varias veces en el orden correcto:

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

(Espero no haberme perdido ninguno)

Como alternativa, puede considerar crear su propio proveedor derivado de ODP.NET con BindByName ajustado.