Lỗi này thường xảy ra trong trường hợp ODP.NET. Vấn đề nằm ở hành vi mặc định của OracleCommand khi kết hợp các tham số truy vấn với các tham số được cung cấp. Theo mặc định là vị trí phương thức được sử dụng thay vì tên phương pháp. Trong thực tế, mỗi tham số được thêm vào lệnh sẽ được sử dụng bất kể tên là gì và nếu bạn tham chiếu một tham số hai lần trong văn bản truy vấn thì bạn phải thêm giá trị cho nó hai lần!
Hành vi mặc định này có thể được ghi đè bằng cách đặt BindByName
thành true
trên OracleCommad
nhưng trong trường hợp của SqlDataSource
bạn không có quyền truy cập vào nó và bạn cần cung cấp các giá trị thay đổi nhiều lần theo thứ tự thích hợp:
<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>
(Tôi hy vọng tôi đã không bỏ lỡ bất kỳ điều nào)
Thay vào đó, bạn có thể cân nhắc việc tạo Nhà cung cấp của riêng mình lấy từ ODP.NET wwith BindByName
đã điều chỉnh.