Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zaawansowane kolejkowanie Oracle z .Net

Nie mogę Ci pomóc z najlepszymi praktykami, ale mogę Ci pomóc z Kolejką UDT. Zanim zajmiesz się kolejką, musisz wygenerować niestandardowe typy z bazy danych do swojego projektu C#. Zakładając, że masz zainstalowany program Visual Studio i ODP.NET, wystarczy połączyć się z bazą danych za pomocą Eksploratora serwera, zlokalizować swoje UDT, kliknąć prawym przyciskiem myszy i wybrać „Generuj niestandardową klasę...” Te klasy są mapowane bezpośrednio na Twoje UDT i są używane do przechowywania informacji z kolejki.

Oto przykład kodu, którego można użyć do umieszczenia wiadomości w kolejce:

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

Jest to podobny proces do usuwania z kolejki:

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 „prosty” przykład. Większość tego wyciągnąłem z Pro ODP.NET dla Oracle Database 11g autorstwa Eda Zehoo. To doskonała książka i gorąco ją polecam, aby pomóc Ci lepiej zrozumieć tajniki wszystkich rzeczy związanych z OPD.NET. E-booka możesz kupić tutaj:http://apress.com/book/view/9781430228202 . Jeśli wpiszesz kod kuponu MACWORLDOC, możesz otrzymać eBooka za 21,00 USD. Ta oferta jest dobra tylko dla eBooków, które są dostarczane w formacie PDF chronionym hasłem. Mam nadzieję, że to pomoże!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego Oracle SQL w tajemniczy sposób rozwiązuje niejednoznaczność w jednym sprzężeniu, a nie w innych?

  2. Jak pobrać dane z kursora w Oracle za pomocą pętli for?

  3. Konwertuj interwał na minuty

  4. oracle systimestamp (sysdate) do milisekund

  5. Który typ danych platformy .NET najlepiej nadaje się do mapowania typu danych Oracle NUMBER w NHibernate?