sql >> データベース >  >> RDS >> Oracle

.Netを使用したOracleAdvancedQueuing

    ベストプラクティスについてはお手伝いできませんが、UDTキューについてはお手伝いできます。キューを処理する前に、データベースからC#プロジェクトにカスタムタイプを生成する必要があります。 Visual StudioとODP.NETがインストールされている場合は、サーバーエクスプローラーを介してデータベースに接続し、UDTを見つけて右クリックし、[カスタムクラスを生成...]を選択するだけです。これらのクラスはUDTに直接マップされ、使用されます。デキューされた情報を保存します。

    メッセージをエンキューするために使用するコードの例を次に示します。

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

    これは、デキューと同様のプロセスです:

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

    これは「単純な」例です。そのほとんどを、EdZehooによるOracleDatabase11g用のProODP.NETから引き出しました。これは優れた本であり、OPD.NETのすべての詳細を理解するのに役立つように強くお勧めします。ここで電子書籍を購入できます: http://apress.com/book/view/9781430228202 > 。クーポンコードMACWORLDOCを入力すると、21.00ドルで電子書籍を入手できます。このオファーは、パスワードで保護されたPDF形式の電子書籍にのみ適しています。これがお役に立てば幸いです!



    1. Microsoft SQL Serverへのログインエラー:18456

    2. 拡張イベントでの述語注文の問題

    3. MSSQLServerでのDBAの一般的な間違い

    4. JDBC接続のネットワークタイムアウトの設定