首页 > 解决方案 > Dapper OracleMappingType.RefCursor 方向:ParameterDirection.Input 不起作用

问题描述

在我的 C# 中,我有一个对象列表,其中包含要插入到我的 Oracle 数据库中的表中的值,我正在使用 foreach 滚动列表并将记录逐个发送到 pck 中的函数,在那里我进行插入. 我正在使用 dapper 来做到这一点。但问题是当记录太多时,时间太长。Ex 35000 刀片。我想知道我是否可以将整个列表发送到银行,然后我可以一次完成所有插入。我考虑过使用 an 的可能性,OracleMappingType.RefCursor direction: ParameterDirection.Input但 RefCursor 不适用于仅用于输出的输入类型。有谁知道如何告诉我一种将整个列表传递给数据库的方法,我可以在那里进行插入?

下面的方法是我今天使用的表格,但是当我有一个非常大的数据列表时,它需要很长时间。

string query = "PCK_TEST.FC_IMPORT_VALUES";

            foreach (var item in ListOfValues)
            {
                var param = new OracleDynamicParameters();

                param.Add("P_VALUE_A", dbType: OracleMappingType.Varchar2, direction: ParameterDirection.Input, value: item.ValueA);
                param.Add("P_VALUE_B", dbType: OracleMappingType.Date, direction: ParameterDirection.Input, value: item.ValueB);
                param.Add("P_VALUE_C", dbType: OracleMappingType.Decimal, direction: ParameterDirection.Input, value: item.ValueC);
                param.Add("P_VALUE_D", dbType: OracleMappingType.Decimal, direction: ParameterDirection.Input, value: item.ValueD);
                param.Add("P_VALUE_E", dbType: OracleMappingType.Decimal, direction: ParameterDirection.Input, value: item.ValueE);
                param.Add("P_VALUE_F", dbType: OracleMappingType.Decimal, direction: ParameterDirection.Input, value: item.ValueF);
                param.Add("P_VALUE_G", dbType: OracleMappingType.Decimal, direction: ParameterDirection.Input, value: item.ValueG);
                param.Add("P_VALUE_H", dbType: OracleMappingType.Decimal, direction: ParameterDirection.Input, value: item.ValueH);
                param.Add("P_VALUE_I", dbType: OracleMappingType.Decimal, direction: ParameterDirection.Input, value: item.ValueI);
                param.Add("P_VALUE_J", dbType: OracleMappingType.Varchar2, direction: ParameterDirection.Input, value: item.ValueJ);
                param.Add("P_VALUE_K", dbType: OracleMappingType.Decimal, direction: ParameterDirection.Input, value: item.ValueK);
                param.Add("P_VALUE_L", dbType: OracleMappingType.Varchar2, direction: ParameterDirection.Input, value: item.ValueL);
                param.Add("P_RETORN", dbType: OracleMappingType.Varchar2, size: 4000, direction: ParameterDirection.ReturnValue);

                await SqlMapper.ExecuteAsync(_con, query, param: param, commandType: CommandType.StoredProcedure);
                var erro = param.Get<string>("P_RETORN");
            }

标签: c#.netoracle.net-coredapper

解决方案


以下解决方案对我有用:Oracle 批量数据插入


推荐阅读