Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 避免在Oracle查询中使用大量代码来处理参数_C#_Sql_Oracle - Fatal编程技术网

C# 避免在Oracle查询中使用大量代码来处理参数

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();

我正在使用Oracle.Data.Client库和一个存储过程调用Oracle数据库,该存储过程有3个输入参数和几十个输出参数

我的代码如下所示:

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或其他复合数据结构的过程