Oracle
 sql >> Database >  >> RDS >> Oracle

Accodamento avanzato Oracle con .Net

Non posso aiutarti con le migliori pratiche, ma posso aiutarti con una coda UDT. Prima di gestire la coda, devi generare tipi personalizzati dal database nel tuo progetto C#. Supponendo che Visual Studio e ODP.NET siano installati, devi semplicemente connetterti al database tramite Esplora server, individuare i tuoi UDT, fare clic con il pulsante destro del mouse e scegliere "Genera classe personalizzata..." Queste classi vengono mappate direttamente ai tuoi UDT e vengono utilizzate per memorizzare le informazioni in coda.

Ecco un esempio del codice che useresti per accodare un messaggio:

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;
}

È un processo simile per rimuovere la coda:

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;

}

Questo è un esempio "semplice". Ho estratto la maggior parte di ciò da Pro ODP.NET per Oracle Database 11g di Ed Zehoo. È un libro eccellente e lo consiglio vivamente per aiutarti a comprendere meglio i pro ei contro di tutte le cose OPD.NET. Puoi acquistare l'eBook qui:http://apress.com/book/view/9781430228202 . Se inserisci il codice coupon MACWORLDOC, puoi ottenere l'eBook per $ 21,00. Tale offerta è valida solo per l'eBook che viene fornito in un formato PDF protetto da password. Spero che questo aiuti!