sql >> Databáze >  >> RDS >> Oracle

Oracle Advanced Queuing with .Net

Nemohu vám pomoci s osvědčenými postupy, ale mohu vám pomoci s frontou UDT. Než se vypořádáte s frontou, musíte vygenerovat vlastní typy z databáze do vašeho projektu C#. Za předpokladu, že máte nainstalované Visual Studio a ODP.NET, stačí se připojit k databázi přes Server Explorer, najít své UDT, kliknout pravým tlačítkem a vybrat "Generate Custom Class..." Tyto třídy se mapují přímo na vaše UDT a používají se. k uložení informací z fronty.

Zde je příklad kódu, který byste použili k zařazení zprávy do fronty:

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

Je to podobný proces jako 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;

}

To je "jednoduchý" příklad. Většinu z toho jsem vytáhl z Pro ODP.NET pro Oracle Database 11g od Eda Zehoo. Je to vynikající kniha a důrazně ji doporučuji, aby vám pomohla lépe porozumět spletitým a nevýhodám všech věcí OPD.NET. E-knihu si můžete zakoupit zde:http://apress.com/book/view/9781430228202 . Pokud zadáte kód kupónu MACWORLDOC, můžete získat eBook za 21,00 $. Tato nabídka platí pouze pro elektronickou knihu, která je dodávána ve formátu PDF chráněném heslem. Doufám, že to pomůže!



  1. MySql Aktualizace jedné tabulky z jiné se nezdařila

  2. Správný databázový model pro systém zpětné vazby od uživatelů (zajímavý případ)

  3. dostupnost hotelového pokoje mysql

  4. PostgreSQL omezení, které se kontroluje při odevzdání a ne dříve