Tôi chưa thể tìm thấy điều này được nêu rõ ở bất kỳ đâu, nhưng một loạt các ví dụ tôi đã tìm thấy trực tuyến tuân theo những gì tôi đã làm.ODP.net có đóng con trỏ khi kết nối đóng không?
Tôi có một lớp C# sử dụng ODP.net để kết nối với một Oracle DB và chạy một thủ tục trong gói.
Gói của tôi đã lưu các thủ tục lấy thông số đầu ra con trỏ ref. Tất cả các thủ tục là mở con trỏ cho một câu lệnh chọn cụ thể.
Nếu tôi thực hiện quy trình này trực tiếp trên db oracle, thì cuối cùng tôi sẽ nhấn số lỗi con trỏ mở tối đa.
Vì vậy, tôi đã tự hỏi nếu ODP.net thực sự đóng con trỏ này đã được mở trong thủ tục của tôi?
Tôi đang sử dụng phương pháp OracleDataApaper.Fill (DataSet).
ví dụ:
DataSet ds = new DataSet();
OracleConnection conn = new OracleConnection(this.connStr);
OracleCommand com = new OracleCommand("MYPKG.MYQUERY", conn);
OracleDataAdapter adapter = new OracleDataAdapter(com);
conn.Open();
com.Parameters.Add("searchParam", OracleDbType.Varchar2).Value = "myName";
com.Parameters.Add("outCursor", OracleDbType.RefCursor, ParameterDirection.Output);
com.CommandType = CommandType.StoredProcedure;
adapter.Fill(ds);
conn.Close();
PROCEDURE GETALLEMAILS(searchParamIN VARCHAR2, outCursor OUT sys_refcursor) AS
BEGIN
open outCursor
select
EAEMAL as Email
from
EmailTable
where
EmailName = searchParam;
END GETALLEMAILS;
Tôi chỉ sợ để lại các con trỏ mở phía sau trên DB là tất cả. Nếu bất cứ ai có thể cung cấp liên kết đến tài liệu chính thức, điều đó thật tuyệt vời!
Cập nhật:
Cảm ơn cho đầu vào. Tôi đã gọi số
com.Dispose();
conn.Close();
conn.Dispose();
nhưng bỏ chúng ra khỏi ví dụ của tôi.
Tôi tìm thấy bài đăng trên diễn đàn này, tuyên bố rằng phương thức OracleDataAdapter.Fill (Dataset) không giải phóng con trỏ ref sau khi phương thức Fill() đã được thực hiện.
http://www.frontoracle.com/oracle-archive/140/386140-close-ref-cursor.html
Tôi muốn tài liệu Oracle rõ ràng hơn khi mô tả quá trình này.
Tôi sẽ thêm OracleDataReader vào danh sách các đối tượng để xử lý, nếu bạn sử dụng Có vẻ như đã giải quyết được vấn đề "con trỏ mở tối đa" của chúng tôi. – Fueled