在C#中清除Oracle Advanced Queue

时间:2015-03-16 20:54:45

标签: c# oracle plsql advanced-queuing

我正在开发一个使用Oracle Advanced Queue来控制它的Windows服务。命令对象将被放置在队列中,服务将使其出列并尝试执行任务。为了控制服务,我还开发了一个小型命令应用程序。此应用程序将命令放在队列上,但我也希望它能够通过在按下按钮时调用dbms_aqadm.purge_queue_table来清除队列。我试过这两种方式。首先我试过了:

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_table有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中运行得很好。因此,在任何一种情况下,我都会收到错误消息,除非我遗漏了一些我不应该得到的东西。我无法想办法解决这个问题。有人可以告诉我我做错了什么或如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我打赌你只需要:

cmd.BindByName = true;