sql >> Database >  >> RDS >> Oracle

Oracle Advanced Queuing met .Net

Ik kan je niet helpen met de best practices, maar ik kan je wel helpen met een UDT Queue. Voordat u de wachtrij afhandelt, moet u aangepaste typen uit de database in uw C#-project genereren. Ervan uitgaande dat u Visual Studio en ODP.NET hebt geïnstalleerd, hoeft u alleen maar verbinding te maken met de database via de Server Explorer, uw UDT's te lokaliseren, met de rechtermuisknop te klikken en "Aangepaste klasse genereren..." te kiezen. Deze klassen worden rechtstreeks toegewezen aan uw UDT's en worden gebruikt om de uit de wachtrij geplaatste informatie op te slaan.

Hier is een voorbeeld van de code die u zou gebruiken om een ​​bericht in de wachtrij te plaatsen:

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

Het is een soortgelijk proces om de wachtrij te verwijderen:

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;

}

Dat is een "eenvoudig" voorbeeld. Ik heb het meeste uit Pro ODP.NET voor Oracle Database 11g van Ed Zehoo gehaald. Het is een uitstekend boek en ik raad het ten zeerste aan om je te helpen een beter begrip te krijgen van de ins en outs van alles wat met OPD.NET te maken heeft. Je kunt het eBook hier kopen:http://apress.com/book/view/9781430228202 . Als u de couponcode MACWORLDOC invoert, kunt u het eBook voor $ 21,00 krijgen. Dat aanbod is alleen goed voor het eBook dat wordt geleverd in een met een wachtwoord beveiligd pdf-formaat. Ik hoop dat dit helpt!



  1. Genereer een set of sequentie zonder lussen – deel 2

  2. Query uitvoeren met behulp van twee kolomwaarden om bereik te maken

  3. Visual Basic voor toepassingen in Microsoft Access

  4. Hoe binaire gegevens op te slaan in MySQL