0

我正在开发一个使用 Oracle 高级队列来控制它的 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 中运行良好。所以在任何一种情况下,我都会收到错误消息,除非我错过了我不应该得到的东西。我想不出办法解决这个问题。有人可以告诉我我做错了什么或如何解决这个问题吗?

4

1 回答 1

0

我打赌你只需要:

cmd.BindByName = true;
于 2015-03-17T15:05:21.957 回答