我正在使用带有3个输入参数和数十个输出参数的存储过程的Oracle.Data.Client库调用Oracle数据库。
我的代码如下所示:
DataTable dt = new DataTable();
OracleConnection connection = new OracleConnection(connectionString);
using (connection)
{
OracleDataAdapter da = new OracleDataAdapter();
OracleCommand cmd = new OracleCommand();
cmd.Connection = connection;
cmd.CommandText = "storedProcedureName";
cmd.CommandType = CommandType.StoredProcedure;
cmd.InitialLONGFetchSize = 1000;
cmd.Parameters.Add("@arg1", arg1);
cmd.Parameters.Add("@arg2", arg2);
cmd.Parameters.Add("@arg3", arg3);
da.SelectCommand = cmd;
da.Fill(dt);
}
当我执行此代码时,Oracle抱怨没有足够的参数。我已经确定它希望我为每个输出参数输入一些代码,如下所示:
cmd.Parameters.Add("@out1", out1);
cmd.Parameters["@out1"].Direction = ParameterDirection.Output;
但这似乎不太优雅,特别是如果我必须对每个输出参数(并且有很多)这样做。有没有办法一次处理所有输出参数?理想情况下,我希望保持存储过程相同,因为它也用于其他项目。
答案 0 :(得分:0)
如果该过程有12个输出参数,则需要将12个输出参数绑定到语句中。
现在,我考虑任何具有12个输出参数的程序,至少是相当可疑的。对于设计良好的API必须处理的参数太多,这让我感到震惊。您尝试将结果放入表中这一事实意味着您确实需要一个输出sys_refcursor
或其他复合数据结构的过程。