sql >> Databasteknik >  >> RDS >> Oracle

Oracle Advanced Queuing med .Net

Jag kan inte hjälpa dig med de bästa metoderna, men jag kan hjälpa dig med en UDT-kö. Innan du hanterar kön måste du generera anpassade typer från databasen till ditt C#-projekt. Förutsatt att du har Visual Studio och ODP.NET installerat behöver du helt enkelt ansluta till databasen via Server Explorer, lokalisera dina UDT:er, högerklicka och välj "Generera anpassad klass..." Dessa klasser mappas direkt till dina UDT:er och används för att lagra informationen från kö.

Här är ett exempel på koden du skulle använda för att ställa ett meddelande 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 är en liknande process som att ta bort 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 är ett "enkelt" exempel. Jag drog ut det mesta från Pro ODP.NET för Oracle Database 11g av Ed Zehoo. Det är en utmärkt bok och jag rekommenderar den starkt för att hjälpa dig att få en bättre förståelse för alla detaljer i OPD.NET. Du kan köpa e-boken här:http://apress.com/book/view/9781430228202 . Om du anger kupongkoden MACWORLDOC kan du få e-boken för $21,00. Det erbjudandet är bara bra för e-boken som kommer i ett lösenordsskyddat PDF-format. Jag hoppas att detta hjälper!



  1. Oracle SQL för sista arbetsdagen i innevarande månad inklusive federala helgdagar i Oracle

  2. Mysql-anslutning nekades på localhost

  3. Konvertera 'tid' till 'datetimeoffset' i SQL Server (T-SQL-exempel)

  4. Försöker konstruera PostgreSQL Query för att extrahera från JSON ett textvärde i ett objekt, i en array, i ett objekt, i en array, i ett objekt