Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

ORA-01008:không phải tất cả các biến bị ràng buộc, khi tất cả chúng đều bị ràng buộc

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hủy thao tác chèn / cập nhật trong trình kích hoạt bằng PL / SQL

  2. Hàm ATAN2 () trong Oracle

  3. Sử dụng REGEXP_SUBSTR với Strings Qualifier

  4. HOẶC Cơ sở dữ liệu / Nhập vào Oracle Express / SQL Developer

  5. Oracle tạo bảng dưới dạng lựa chọn với điều kiện tối đa đếm