避免大量代码处理Oracle查询中的参数

时间:2014-06-13 21:18:31

标签: c# sql oracle

我正在使用带有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;

但这似乎不太优雅,特别是如果我必须对每个输出参数(并且有很多)这样做。有没有办法一次处理所有输出参数?理想情况下,我希望保持存储过程相同,因为它也用于其他项目。

1 个答案:

答案 0 :(得分:0)

如果该过程有12个输出参数,则需要将12个输出参数绑定到语句中。

现在,我考虑任何具有12个输出参数的程序,至少是相当可疑的。对于设计良好的API必须处理的参数太多,这让我感到震惊。您尝试将结果放入表中这一事实意味着您确实需要一个输出sys_refcursor或其他复合数据结构的过程。