C# 在C中清除Oracle高级队列#
我正在开发一个Windows服务,它使用Oracle高级队列来控制它。命令对象将放置在队列上,服务将使其退出队列并尝试执行任务。为了控制服务,我还开发了一个小型命令应用程序。此应用程序将在队列上放置命令,但我也希望它能够在按下按钮时通过调用dbms_aqadm.purge_queue_table来清除队列。我试过两种方法。首先,我尝试:C# 在C中清除Oracle高级队列#,c#,oracle,plsql,advanced-queuing,C#,Oracle,Plsql,Advanced Queuing,我正在开发一个Windows服务,它使用Oracle高级队列来控制它。命令对象将放置在队列上,服务将使其退出队列并尝试执行任务。为了控制服务,我还开发了一个小型命令应用程序。此应用程序将在队列上放置命令,但我也希望它能够在按下按钮时通过调用dbms_aqadm.purge_queue_table来清除队列。我试过两种方法。首先,我尝试: using (OracleConnection conn = new OracleConnection(ConfigurationManager.Connect
using (OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
conn.Open();
OracleCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "dbms_aqadm.purge_queue_table";
cmd.Parameters.Add("queue_table", "PRISMPRO_Q_TAB");
cmd.Parameters.Add("purge_condition", DBNull.Value);
cmd.Parameters.Add("purge_options", DBNull.Value);
cmd.ExecuteNonQuery();
conn.Close();
}
我得到以下错误:
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'PURGE_QUEUE_TABLE'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
dbms_aqadm.purge_queue_表有3个参数,我给它传递了3个参数。此外,它们的类型是正确的。没有我能说的最好的理由来解释为什么会发生这个错误。我无法想出如何让它消失,因此我尝试了以下方法:
using (OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
conn.Open();
OracleCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "exec dbms_aqadm.purge_queue_table('PRISMPRO_Q_TAB', NULL, NULL)";
cmd.ExecuteNonQuery();
conn.Close();
}
并得到了错误信息:
ORA-00900: invalid SQL statement
SQL语句不是无效的。它在SQL Developer中运行良好。因此,在任何一种情况下,我都会收到错误消息,除非我错过了一些我不应该得到的东西。我想不出一个解决办法。有人能告诉我我做错了什么,或者如何解决这个问题吗?我打赌你只需要:
cmd.BindByName = true;
不幸的是,事实并非如此。当我最初编写这个应用程序时,我使用了Oracle的ODP.net,它使用位置绑定。然而,当我遇到这个问题时,我尝试使用Microsoft的System.Data.OracleClient,但也没有解决问题。默认情况下,System.Data.OracleClient按名称绑定参数。您使用的是哪个Oracle版本?根据,Oracle 9.2.0.6.0中存在导致间歇性VARCHAR2绑定错误的错误。我们使用的是版本12c