【问题标题】:OracleCommand execution blocks if has OracleDependency如果具有 OracleDependency,则 OracleCommand 执行块
【发布时间】:2010-12-11 15:17:48
【问题描述】:

我有以下代码:

OracleConnection conn = new OracleConnection(connString);
OracleCommand command = new OracleCommand("select * from testtable", conn);
conn.Open();
OracleDependency.Port = 2010;
OracleDependency dependency = new OracleDependency(command);
command.AddRowid = true;
command.Notification.IsNotifiedOnce = false;

dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);

command.CommandTimeout = 1000;
DataTable t = new DataTable();
OracleDataAdapter adapter = new OracleDataAdapter(command);
adapter.Fill(t);
conn.Close();

这是一个非常简单的代码,它使用 Oracle 通知服务来接收有关特定表更改的通知。

我的问题是,当我调用 adapter.Fill(t); 时,执行只是阻塞了。如果没有附加依赖项,则该命令将在一个实例中执行,因此它不是数据库或数据。我可以通过查询表user_change_notification_regs看到回调注册到数据库,并且还打开了指定的端口(2010):

net8://(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST='myIp')(PORT=2010)))?PR=0

我束手无策,没有办法尝试。

【问题讨论】:

    标签: oracle10g dependencies notifications oraclecommand


    【解决方案1】:

    当我尝试将端口号设置为已在我的机器上使用的端口时,我发现在类似情况下引发了异常。一旦我注释掉设置端口号它运行良好,所以也许你可以尝试一下?并检查“netstat -na”是否已使用的端口。

    我看到的例外是:

    Oracle.DataAccess.Client.OracleException: ORA-24912: Listener thread failed. Listen failed.
    at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
    at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
    at Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
    at Oracle.DataAccess.Client.OracleDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
    at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
    

    令人困惑的事情(至少对我而言)是异常不是在设置端口时引发的,而是在稍后对其执行第一个查询时引发的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-19
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多