Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle Advanced Queuing avec .Net

Je ne peux pas vous aider avec les meilleures pratiques, mais je peux vous aider avec une file d'attente UDT. Avant de gérer la file d'attente, vous devez générer des types personnalisés à partir de la base de données dans votre projet C#. En supposant que Visual Studio et ODP.NET sont installés, il vous suffit de vous connecter à la base de données via l'Explorateur de serveurs, de localiser vos UDT, de cliquer avec le bouton droit de la souris et de choisir "Générer une classe personnalisée...". Ces classes correspondent directement à vos UDT et sont utilisées pour stocker les informations retirées de la file d'attente.

Voici un exemple de code que vous utiliseriez pour mettre un message en file d'attente :

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

C'est un processus similaire à retirer de la file d'attente :

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;

}

C'est un exemple "simple". J'ai extrait la majeure partie de cela de Pro ODP.NET pour Oracle Database 11g par Ed Zehoo. C'est un excellent livre et je le recommande vivement pour vous aider à mieux comprendre les tenants et les aboutissants de tout ce qui concerne OPD.NET. Vous pouvez acheter le livre électronique ici :http://apress.com/book/view/9781430228202 . Si vous entrez le code promo MACWORLDOC, vous pouvez obtenir le livre électronique pour 21,00 $. Cette offre n'est valable que pour le livre électronique qui se présente sous un format PDF protégé par mot de passe. J'espère que cela vous aidera !