Tôi không thể giúp bạn về các phương pháp hay nhất, nhưng tôi có thể giúp bạn với Hàng đợi UDT. Trước khi xử lý hàng đợi, bạn cần tạo các kiểu tùy chỉnh từ cơ sở dữ liệu vào dự án C # của mình. Giả sử bạn đã cài đặt Visual Studio và ODP.NET, bạn chỉ cần kết nối với cơ sở dữ liệu thông qua Server Explorer, xác định vị trí các UDT của bạn, nhấp chuột phải và chọn "Tạo lớp tùy chỉnh ..." Các lớp này ánh xạ trực tiếp đến các UDT của bạn và được sử dụng để lưu trữ thông tin Dequeued.
Đây là một ví dụ về mã bạn sẽ sử dụng để xếp hàng một thư:
private void main(string[] args)
{
string _connstring = "Data Source=host/DB;User
Id=USER;Password=PASSWORD1;";
OracleConnection _connObj = new OracleConnection(_connstring);
// Create a new queue object
OracleAQQueue _queueObj = new OracleAQQueue("UDT_NAME", _connObj);
_connObj.Open();
OracleTransaction _txn = _connObj.BeginTransaction();
// Set the payload type to your UDT
_queueObj.MessageType = OracleAQMessageType.Udt;
_queueObj.UdtTypeName = "UDT_NAME";
// Create a new message object
OracleAQMessage _msg = new OracleAQMessage();
// Create an instance of JobClass and pass it in as the payload for the
// message
UDT_CUSTOM_CLASS _custClass = new UDT_CUSTOM_CLASS();
// Load up all of the properties of custClass
custClass.CustString = "Custom String";
custClass.CustInt = 5;
_msg.Payload = custClass;
// Enqueue the message
_queueObj.EnqueueOptions.Visibility = OracleAQVisibilityMode.OnCommit;
_queueObj.Enqueue(_msg);
_txn.Commit();
_queueObj.Dispose();
_connObj.Close();
_connObj.Dispose();
_connObj = null;
}
Đây là một quá trình tương tự như dequeue:
private void main(string[] args)
{
string _connstring = "Data Source=host/DB;User
Id=USER;Password=PASSWORD1;";
OracleConnection _connObj = new OracleConnection(_connstring);
// Create a new queue object
OracleAQQueue _queueObj = new OracleAQQueue("UDT_NAME", _connObj);
// Set the payload type to your UDT
_queueObj.MessageType = OracleAQMessageType.Udt;
_queueObj.UdtTypeName = "UDT_NAME";
_connObj.Open();
OracleTransaction _txn = _connObj.BeginTransaction();
// Dequeue the message.
_queueObj.DequeueOptions.Visibility = OracleAQVisibilityMode.OnCommit;
_queueObj.DequeueOptions.Wait = 10;
OracleAQMessage _deqMsg = _queueObj.Dequeue();
UDT_CUSTOM_CLASS data = (UDT_CUSTOM_CLASS)_deqMsg.Payload;
// At this point, you have the data and can do whatever you need to do with it
_txn.Commit();
_queueObj.Dispose();
_connObj.Close();
_connObj.Dispose();
_connObj = null;
}
Đó là một ví dụ "đơn giản". Tôi đã rút hầu hết điều đó ra khỏi Pro ODP.NET cho Cơ sở dữ liệu Oracle 11g của Ed Zehoo. Đó là một cuốn sách xuất sắc và tôi thực sự khuyên bạn nên dùng nó để giúp bạn hiểu rõ hơn về những điều bên trong OPD.NET. Bạn có thể mua sách điện tử tại đây: http://apress.com/book/view/9781430228202 . Nếu bạn nhập mã phiếu giảm giá MACWORLDOC, bạn có thể nhận được sách điện tử với giá $ 21,00. Ưu đãi đó chỉ tốt cho sách điện tử có định dạng PDF được bảo vệ bằng mật khẩu. Tôi hy vọng điều này sẽ hữu ích!