oracle ExecuteScalar在并行编程中有时会返回null

本文关键字:返回 null ExecuteScalar 并行 编程 oracle | 更新日期: 2023-09-27 18:09:18

我使用并行编程来执行两个并行的oracle数据库查询。有时"res"对象返回null。知道为什么吗?请注意,这是对同一个表的计数查询,没有任何东西修改这个表,所以数据库表和查询都没有改变。

string query = "select count(*) from SALES_ADVENTUREWORKS2012.SALESORDERDETAIL where PRODUCTID=709";
tasks[0] = Task.Factory.StartNew(() => db.ExecScalarQuery(query));
tasks[1] = Task.Factory.StartNew(() => db.ExecScalarQuery(query));
Task.WaitAll(tasks);
//---------------
public void ExecScalarQuery(String query)
{
    OracleConnection conn = new OracleConnection(connectionString);
    try
    {
        conn.Open();
        OracleCommand cmd = new OracleCommand();
        cmd.Connection = conn;
        cmd.CommandText = query;// "select count(*) from SALES_ADVENTUREWORKS2012.SALESORDERDETAIL where PRODUCTID=709";
        cmd.CommandType = CommandType.Text;
        cmd.CommandTimeout = QUERY_TIMEOUT;
        Object res cmd.ExecuteScalar();
    }
    finally
    {
        conn.Close();
    }
}

oracle ExecuteScalar在并行编程中有时会返回null

据我所知,如果在JDBC中关闭一个连接,它的依赖资源也将被关闭。