通过 ODP 将记录从 pl-sql 传递到 C#
Posted
技术标签:
【中文标题】通过 ODP 将记录从 pl-sql 传递到 C#【英文标题】:Passing records from pl-sql to C# via ODP 【发布时间】:2013-04-19 15:39:42 【问题描述】:我正在开发一个项目,该项目在 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# 访问多个数据库元素?
【问题讨论】:
【参考方案1】:创建一个视图而不是存储过程,并使用 OracleDataReader 来填充您的数据集。
【讨论】:
以上是关于通过 ODP 将记录从 pl-sql 传递到 C#的主要内容,如果未能解决你的问题,请参考以下文章