将ODP.NET核心阅读器的结果转换为数据集或列表

lymgl2op  于 2022-10-04  发布在  .NET
关注(0)|答案(1)|浏览(140)

我正在处理一个项目,其中我需要连接到Oracle数据库。我还希望快速编写代码,并希望避免定义实体和使用EntityFrame来实现持久性。

根据Oracle示例,要从数据库检索数据,我需要依赖一个读取器,该读取器可以使用“cmd.ExecuteReader()”获得,然后使用一个While(Reader.Read())循环结果。

我发现这有点烦人。因此,在确保使用阅读器方式接收数据后,我尝试了一种在我看来是将整个结果转换为对象列表的方法,但这触发了无限循环。

以下是我尝试过的:

var result = new List<object>();
        try
        {
            _connection = new OracleConnection(CONNECTION_STRING);
            _connection.Open();
            OracleCommand cmd = _connection.CreateCommand();
            cmd.CommandText = "select * from <table>";

            using (var reader = cmd.ExecuteReader())
            {
                result = reader.OfType<object>().ToList();  

            }

        }
        finally
        {
           if(_connection != null) _connection.Close();

        }

        return result;
    }

使用ODP.NET Core以列表、数据集或JSON格式获取结果的最佳方式是什么?

更新:

使用OracleDataAdapter还会触发无限循环:

DataSet data = new DataSet();
        try
        {
            _connection = new OracleConnection(CONNECTION_STRING);
            _connection.Open();
            OracleCommand cmd = _connection.CreateCommand();
            cmd.CommandText = "select * from <table>";
            OracleDataAdapter ora = new OracleDataAdapter(cmd);
            ora.Fill(data);
        }
        finally
        {
           if(_connection != null) _connection.Close();

        }
        return data;
    }
rxztt3cl

rxztt3cl1#

使用OracleDataAdapter成功了!由于数据量大,会导致死循环。以下是工作代码:

DataSet data = new DataSet();
    try
    {
        _connection = new OracleConnection(CONNECTION_STRING);
        _connection.Open();
        OracleCommand cmd = _connection.CreateCommand();
        cmd.CommandText = "select * from <table>";
        OracleDataAdapter ora = new OracleDataAdapter(cmd);
        ora.Fill(data);
    }
    finally
    {
       if(_connection != null) _connection.Close();

    }
    return data;
}

相关问题