Kesalahan ini sering terjadi dalam kasus ODP.NET. Masalahnya terletak pada perilaku default OracleCommand dalam hal mencocokkan parameter kueri dengan parameter yang disediakan. Secara default posisi metode digunakan sebagai ganti nama metode. Dalam praktiknya, setiap parameter yang ditambahkan ke perintah akan dianggap apa adanya, apa pun namanya, dan jika Anda mereferensikan parameter dua kali dalam teks kueri, maka Anda harus menambahkan nilainya dua kali!
Perilaku default ini dapat ditimpa dengan menyetel BindByName
untuk true
di OracleCommad
tetapi dalam kasus SqlDataSource
Anda tidak memiliki akses ke sana dan Anda perlu memberikan nilai beberapa kali dalam urutan yang benar:
<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>
(Saya harap saya tidak melewatkan apapun)
Sebagai alternatif, Anda dapat mempertimbangkan untuk membuat Penyedia Anda sendiri yang berasal dari ODP.NET dengan BindByName
disesuaikan.