Не мога да ви помогна с най-добрите практики, но мога да ви помогна с UDT опашка. Преди да се справите с опашката, трябва да генерирате персонализирани типове от базата данни във вашия C# проект. Ако приемем, че имате инсталирани Visual Studio и ODP.NET, просто трябва да се свържете с базата данни чрез Server Explorer, да намерите вашите UDT, да щракнете с десния бутон и да изберете „Генериране на персонализиран клас...“ Тези класове се картографират директно към вашите UDT и се използват за съхраняване на информацията от опашката.
Ето пример за кода, който бихте използвали, за да поставите съобщение в опашка:
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;
}
Това е подобен процес на изваждане от опашка:
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;
}
Това е "прост" пример. Извадих повечето от това от Pro ODP.NET за Oracle Database 11g от Ed Zehoo. Това е отлична книга и силно я препоръчвам, за да ви помогне да разберете по-добре тънкостите на всички неща, свързани с OPD.NET. Можете да закупите електронната книга тук:http://apress.com/book/view/9781430228202 . Ако въведете кода на купона MACWORLDOC, можете да получите електронната книга за $21,00. Тази оферта е добра само за електронната книга, която се предлага в PDF формат, защитен с парола. Надявам се това да помогне!