使用.Net进行Oracle高级排队

前端之家收集整理的这篇文章主要介绍了使用.Net进行Oracle高级排队前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有人知道如何使用PL / Ssql和ODP.NET从C#实现Oracle Advance Queue?
我在C#或VB.NET中找不到具有具体示例的单个示例或资源.
理想情况下,我想了解一些关于如何使用简单类型(XMl / string)排队和出列消息的示例.
我无法帮助您掌握最佳实践,但我可以帮助您使用UDT队列.在处理队列之前,需要从数据库生成自定义类型到C#项目中.假设您安装了Visual Studio和ODP.NET,您只需通过Server Explorer连接到数据库,找到您的UDT,右键单击并选择“Generate Custom Class …”这些类直接映射到您的UDT并使用存储出列信息.

以下是用于排队邮件代码示例:

  1. private void main(string[] args)
  2. {
  3. string _connstring = "Data Source=host/DB;User
  4. Id=USER;Password=PASSWORD1;";
  5.  
  6. OracleConnection _connObj = new OracleConnection(_connstring);
  7.  
  8. // Create a new queue object
  9. OracleAQQueue _queueObj = new OracleAQQueue("UDT_NAME",_connObj);
  10.  
  11. _connObj.Open();
  12.  
  13. OracleTransaction _txn = _connObj.BeginTransaction();
  14.  
  15. // Set the payload type to your UDT
  16. _queueObj.MessageType = OracleAQMessageType.Udt;
  17. _queueObj.UdtTypeName = "UDT_NAME";
  18.  
  19. // Create a new message object
  20. OracleAQMessage _msg = new OracleAQMessage();
  21.  
  22. // Create an instance of JobClass and pass it in as the payload for the
  23. // message
  24. UDT_CUSTOM_CLASS _custClass = new UDT_CUSTOM_CLASS();
  25. // Load up all of the properties of custClass
  26. custClass.CustString = "Custom String";
  27. custClass.CustInt = 5;
  28.  
  29. _msg.Payload = custClass;
  30.  
  31. // Enqueue the message
  32. _queueObj.EnqueueOptions.Visibility = OracleAQVisibilityMode.OnCommit;
  33. _queueObj.Enqueue(_msg);
  34.  
  35. _txn.Commit();
  36. _queueObj.Dispose();
  37. _connObj.Close();
  38. _connObj.Dispose();
  39. _connObj = null;
  40. }

这是一个类似的出列过程:

  1. private void main(string[] args)
  2. {
  3. string _connstring = "Data Source=host/DB;User
  4. Id=USER;Password=PASSWORD1;";
  5.  
  6. OracleConnection _connObj = new OracleConnection(_connstring);
  7.  
  8. // Create a new queue object
  9. OracleAQQueue _queueObj = new OracleAQQueue("UDT_NAME",_connObj);
  10.  
  11. // Set the payload type to your UDT
  12. _queueObj.MessageType = OracleAQMessageType.Udt;
  13. _queueObj.UdtTypeName = "UDT_NAME";
  14.  
  15. _connObj.Open();
  16.  
  17. OracleTransaction _txn = _connObj.BeginTransaction();
  18.  
  19. // Dequeue the message.
  20. _queueObj.DequeueOptions.Visibility = OracleAQVisibilityMode.OnCommit;
  21. _queueObj.DequeueOptions.Wait = 10;
  22. OracleAQMessage _deqMsg = _queueObj.Dequeue();
  23.  
  24. UDT_CUSTOM_CLASS data = (UDT_CUSTOM_CLASS)_deqMsg.Payload;
  25.  
  26. // At this point,you have the data and can do whatever you need to do with it
  27.  
  28. _txn.Commit();
  29. _queueObj.Dispose();
  30. _connObj.Close();
  31. _connObj.Dispose();
  32. _connObj = null;
  33.  
  34. }

这是一个“简单”的例子.我从Ed Zehoo的Pro ODP.NET for Oracle Database 11g中删除了大部分内容.这是一本很好的书,我强烈建议它帮助你更好地理解OPD.NET所有东西的来龙去脉.您可以在这里购买电子书:http://apress.com/book/view/9781430228202.如果您输入优惠券代码MACWORLDOC,您可以以21.00美元的价格购买电子书.该优惠仅适用于受密码保护的PDF格式的电子书.我希望这有帮助!

猜你在找的Oracle相关文章