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

Oracle Advanced Queuing med .Net

Jeg kan ikke hjælpe dig med de bedste fremgangsmåder, men jeg kan hjælpe dig med en UDT-kø. Før du håndterer køen, skal du generere brugerdefinerede typer fra databasen til dit C#-projekt. Forudsat at du har Visual Studio og ODP.NET installeret, skal du blot oprette forbindelse til databasen gennem Server Explorer, finde dine UDT'er, højreklikke og vælge "Generer brugerdefineret klasse..." Disse klasser kortlægges direkte til dine UDT'er og bruges for at gemme oplysningerne fra køen.

Her er et eksempel på den kode, du ville bruge til at sætte en besked i kø:

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

Det er en lignende proces at sætte i kø:

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;

}

Det er et "simpelt" eksempel. Jeg trak det meste ud af Pro ODP.NET til Oracle Database 11g af Ed Zehoo. Det er en fremragende bog, og jeg anbefaler den kraftigt for at hjælpe dig med at få en bedre forståelse af ins og outs i alt OPD.NET. Du kan købe e-bogen her:http://apress.com/book/view/9781430228202 . Hvis du indtaster kuponkoden MACWORLDOC, kan du få e-bogen for $21,00. Dette tilbud er kun godt for e-bogen, som kommer i et adgangskodebeskyttet PDF-format. Jeg håber dette hjælper!



  1. Django prefetch_related med limit

  2. SQLAlchemy Core - genererer PostgreSQL SUBSTRING udtryk?

  3. Registrerer utf8 ødelagte tegn i MySQL

  4. Gruppér OHLC-aktiemarkedsdata i flere tidsrammer - Mysql