sql >> Base de Datos >  >> RDS >> Oracle

Cola avanzada de Oracle con .Net

No puedo ayudarlo con las mejores prácticas, pero puedo ayudarlo con una cola UDT. Antes de lidiar con la cola, debe generar tipos personalizados de la base de datos en su proyecto de C#. Suponiendo que tiene instalado Visual Studio y ODP.NET, simplemente necesita conectarse a la base de datos a través del Explorador de servidores, ubicar sus UDT, hacer clic con el botón derecho y elegir "Generar clase personalizada...". Estas clases se asignan directamente a sus UDT y se utilizan para almacenar la información Dequeued.

Este es un ejemplo del código que usaría para poner en cola un mensaje:

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 un proceso similar al de queue:

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;

}

Ese es un ejemplo "simple". Saqué la mayor parte de eso de Pro ODP.NET para Oracle Database 11g de Ed Zehoo. Es un libro excelente y lo recomiendo encarecidamente para ayudarlo a obtener una mejor comprensión de los entresijos de todo lo relacionado con OPD.NET. Puede comprar el libro electrónico aquí:http://apress.com/book/view/9781430228202 . Si ingresa el código de cupón MACWORLDOC, puede obtener el libro electrónico por $ 21.00. Esa oferta solo es válida para el libro electrónico que viene en un formato PDF protegido con contraseña. ¡Espero que esto ayude!