sql >> Database >  >> RDS >> Oracle

ORA-01008:niet alle variabelen gebonden, als ze allemaal gebonden zijn

Deze fout komt vaak voor in het geval van ODP.NET. Het probleem ligt in het standaardgedrag van OracleCommand als het gaat om het matchen van queryparameters aan opgegeven parameters. Standaard is de positie methode wordt gebruikt in plaats van naam methode. In de praktijk zal elke parameter die aan de opdracht wordt toegevoegd, worden genomen zoals deze is, ongeacht de naam, en als u twee keer naar een parameter verwijst in de querytekst, moet u de waarde ervoor twee keer toevoegen!

Dit standaardgedrag kan worden overschreven door BindByName . in te stellen naar true op OracleCommad maar in het geval van SqlDataSource je hebt er geen toegang toe en je moet de waarden meerdere keren in de juiste volgorde invoeren:

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

(Ik hoop dat ik er geen heb gemist)

Als alternatief kunt u overwegen om uw eigen Provider te maken die is afgeleid van ODP.NET met BindByName aangepast.




  1. probleem bij het vinden van een lijst met bestanden in de map

  2. 9 echt handige MySQL-datumfuncties die gemakkelijk te onthouden zijn

  3. Een cursor terugbrengen van een innerlijke procedure naar een uiterlijke procedure in orakel pl/sql

  4. Taal voor MySQL-foutberichten wijzigen