Ich kann Ihnen nicht mit den Best Practices helfen, aber ich kann Ihnen mit einer UDT-Warteschlange helfen. Bevor Sie sich mit der Warteschlange befassen, müssen Sie benutzerdefinierte Typen aus der Datenbank in Ihr C#-Projekt generieren. Angenommen, Sie haben Visual Studio und ODP.NET installiert, müssen Sie sich einfach über den Server-Explorer mit der Datenbank verbinden, Ihre UDTs suchen, mit der rechten Maustaste klicken und "Benutzerdefinierte Klasse generieren ..." auswählen. Diese Klassen werden direkt Ihren UDTs zugeordnet und verwendet um die Dequeued-Informationen zu speichern.
Hier ist ein Beispiel für den Code, den Sie verwenden würden, um eine Nachricht einzureihen:
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;
}
Es ist ein ähnlicher Vorgang zum Entfernen aus der Warteschlange:
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;
}
Das ist ein "einfaches" Beispiel. Das meiste davon habe ich aus Pro ODP.NET für Oracle Database 11g von Ed Zehoo entnommen. Es ist ein ausgezeichnetes Buch und ich empfehle es dringend, um Ihnen dabei zu helfen, die Vor- und Nachteile von OPD.NET besser zu verstehen. Sie können das eBook hier kaufen:http://apress.com/book/view/9781430228202 . Wenn Sie den Gutscheincode MACWORLDOC eingeben, können Sie das eBook für 21,00 $ erhalten. Dieses Angebot gilt nur für das eBook, das in einem passwortgeschützten PDF-Format geliefert wird. Ich hoffe, das hilft!