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.