0

我正在开发一个项目,该项目在 C# 中具有 Pl-Sql 和 GUI 的业务逻辑。

我在 Pl-Sql 中有一个记录类型,将files表表示为:

type file_record is record(
    id        number
   ,file_name varchar2(256));

type file_record_type is table of file_record index by pls_integer;

我想将所有条目放到表中并将它们传递给 C#。

PL-Sql 程序是:

procedure get_all_file_names(p_files out file_record_type) is

v_counter number := 1;

begin

for c in (select id
                ,file_name
            from files) loop
  p_files(v_counter).id := c.id;
  p_files(v_counter).file_name := c.file_name;
  v_counter := v_counter + 1;
end loop;

end get_all_file_names;

我通过 C# 调用这个过程,如下所示:

// get pmp entries from inside a specific file
    public DataSet getAllPmpFileNames(string commandText)
    {
        DataSet dataSet = new DataSet();

        OracleCommand oracleCommand = new OracleCommand();

        OracleParameter oracleParameter = new OracleParameter("p_files", OracleDbType.Object);
        oracleParameter.Direction = ParameterDirection.Output;
        oracleParameter.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
        oracleCommand.Parameters.Add(oracleParameter);

        oracleCommand.CommandText = commandText;
        oracleCommand.CommandType = CommandType.StoredProcedure;

        try
        {
            oracleCommand.Connection = m_Connection;
            OracleDataAdapter oracleDataAdapter = new OracleDataAdapter(oracleCommand);
            oracleDataAdapter.Fill(dataSet);
        }
        catch (Exception)
        {
            throw;
        }

        return dataSet;
    }

当我从 C# 调用它时,我得到了异常OracleParameter.Size is invalid

在打电话之前我不能给出尺寸,因为我不知道。我应该先得到尺寸然后调用程序吗?

或者有没有其他优雅的方法可以从 C# 访问多个数据库元素?

4

1 回答 1

0

创建一个视图而不是存储过程,并使用 OracleDataReader 来填充您的数据集。

于 2013-05-03T18:07:07.153 回答