Code: Select all
var vgensType = OracleType.GetObjectType("TEST_SCHEMA", "VGENS", con);
var genType = OracleType.GetObjectType("TEST_SCHEMA", "GEN", con);
Code: Select all
create table ZGLOBAL
(
GUID RAW(16) default sys_guid() not null,
XDATA TEST_SCHEMA.VGENS
)
Code: Select all
const int batchSize = 5;
var value = new OracleArray(vgensType);
using (var cmd = new OracleCommand("insert into zglobal (xdata) values (:xdata)", con))
{
var random = new Random();
var values = new object[batchSize];
for (int i = 0; i < values.Length; i++)
{
var value = new OracleArray(vgensType);
values[i] = value;
for (int j = 0; j < random.Next(10); j++)
{
var item = new OracleObject(genType);
item["NAME"] = "element" + j;
item["CNUM"] = random.NextDouble() * 1000000;
value.Add(item);
}
}
var param = cmd.Parameters.Add("xdata", OracleDbType.Array);
param.OracleDbType = OracleDbType.Array;
foreach(var array in values) {
param.Value = array;
cmd.ExecuteNonQuery();
}
}
Code: Select all
var param = cmd.Parameters.Add("xdata", OracleDbType.Array);
param.OracleDbType = OracleDbType.Array;
param.Value = values;
cmd.ExecuteArray(batchSize);
What am I doing wrong or is this feature not implemented properly?System.ArgumentException was unhandled
Message="Argument 'Iters' must be equal to ArrayLength."
Source="Devart.Data.Oracle"
StackTrace:
at Devart.Data.Oracle.OracleParameter.a(Object A_0, ar& A_1, OracleDbType A_2, Int32 A_3, ParameterDirection A_4, Int32 A_5, Int32 A_6, aw A_7)
at Devart.Data.Oracle.OracleCommand.a(ab A_0, Int32 A_1, OracleParameterCollection A_2, aw A_3, Boolean& A_4)
at Devart.Data.Oracle.OracleCommand.a(CommandBehavior A_0, IDisposable A_1, Int32 A_2, Int32 A_3)
at Devart.Common.DbCommandBase.ExecuteDbDataReader(CommandBehavior behavior)
at Devart.Data.Oracle.OracleCommand.ExecuteNonQuery()
at Devart.Data.Oracle.OracleCommand.ExecuteArray(Int32 iters)
InnerException: