C# 避免在Oracle查询中使用大量代码来处理参数
我正在使用Oracle.Data.Client库和一个存储过程调用Oracle数据库,该存储过程有3个输入参数和几十个输出参数 我的代码如下所示:C# 避免在Oracle查询中使用大量代码来处理参数,c#,sql,oracle,C#,Sql,Oracle,我正在使用Oracle.Data.Client库和一个存储过程调用Oracle数据库,该存储过程有3个输入参数和几十个输出参数 我的代码如下所示: DataTable dt = new DataTable(); OracleConnection connection = new OracleConnection(connectionString); using (connection) { OracleDataAdapter da = new OracleDataAdapter();
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;
但这似乎并不优雅,特别是如果我必须对每个输出参数都这样做,并且有很多输出参数。有没有一种方法可以同时处理所有的输出参数?理想情况下,我希望保持存储过程不变,因为它也用于其他项目。如果该过程有12个输出参数,则需要将12个输出参数绑定到语句中
现在,我会考虑任何有12个输出参数的程序,至少是相当可疑的。这让我感到,对于一个设计良好的API来说,需要处理的参数太多了。您试图将结果放入表中,这一事实对我来说意味着您确实需要一个输出sys_refcursor或其他复合数据结构的过程