有人知道如何使用 PL/SSQL 和 ODP.NET 从 C# 实现 Oracle Advance Queue?
我找不到包含 C# 或 VB.NET 中具体示例的单个示例或资源。
理想情况下,我想要一些关于如何使用简单类型(XMl/字符串)将消息入队和出队的示例。
我无法帮助您实现最佳实践,但我可以帮助您实现 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;
}
这是一个“简单”的例子。我从 Ed Zehoo 的 Pro ODP.NET for Oracle Database 11g 中提取了大部分内容。这是一本很棒的书,我强烈推荐它来帮助您更好地了解 OPD.NET 的来龙去脉。您可以在这里购买电子书:http://apress.com/book/view/9781430228202 http://apress.com/book/view/9781430228202。如果您输入优惠券代码 MACWORLDOC,您可以花费 21.00 美元购买电子书。该优惠仅适用于受密码保护的 PDF 格式的电子书。我希望这有帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)