我正在开发一个使用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中运行得很好。因此,在任何一种情况下,我都会收到错误消息,除非我遗漏了一些我不应该得到的东西。我无法想办法解决这个问题。有人可以告诉我我做错了什么或如何解决这个问题?
答案 0 :(得分:0)
我打赌你只需要:
cmd.BindByName = true;