sql >> Databáze >  >> RDS >> Oracle

ORA-01008:nejsou svázány všechny proměnné, když jsou všechny svázány

Tato chyba se často vyskytuje v případě ODP.NET. Problém spočívá ve výchozím chování OracleCommand, pokud jde o shodu parametrů dotazu s dodanými parametry. Ve výchozím nastavení pozice namísto name je použita metoda metoda. V praxi bude každý parametr přidaný do příkazu brán tak, jak je, bez ohledu na název, a pokud na parametr odkazujete dvakrát v textu dotazu, musíte pro něj přidat hodnotu dvakrát!

Toto výchozí chování lze přepsat nastavením BindByName true na OracleCommad ale v případě SqlDataSource nemáte k němu přístup a musíte zadat hodnoty vícekrát ve správném pořadí:

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

(Doufám, že jsem žádné nevynechal)

Jako alternativu můžete zvážit vytvoření vlastního poskytovatele odvozeného z ODP.NET wwith BindByName upraveno.




  1. (My)SQL JOIN - získejte týmy s přesně specifikovanými členy

  2. MySql vyberte formát, kulatý sloupec

  3. Nastavení a údržba replikace PostgreSQL pomocí Ansible

  4. Jak nastavíte Incemental na true pro více tabulek se stejným vlastníkem pomocí DBMS_STATS.set_table_prefs?