Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

ORA-01008:nem todas as variáveis ​​estão vinculadas, quando todas estão vinculadas


Esse erro geralmente acontece no caso do ODP.NET. O problema está no comportamento padrão do OracleCommand quando se trata de corresponder parâmetros de consulta aos parâmetros fornecidos. Por padrão, a posição é usado em vez de nome método. Na prática, cada parâmetro adicionado ao comando será considerado como está, independentemente do nome, e se você fizer referência a um parâmetro duas vezes no texto da consulta, precisará adicionar o valor duas vezes!

Esse comportamento padrão pode ser substituído definindo BindByName para true em OracleCommad mas no caso de SqlDataSource você não tem acesso a ele e precisa fornecer valores várias vezes na ordem correta:
<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 não ter perdido nenhum)

Como alternativa, você pode considerar a criação de seu próprio provedor derivado do ODP.NET com BindByName ajustado.