我正在开发一个项目,该项目在 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# 访问多个数据库元素?