My result is :
Dot Connect For Oracle : 27 sec
ODP : 97 ms
My code (Direct Mode is set to false) :
Code: Select all
public static void TestArrayBind()
{
// generate test values
Guid idTest = Guid.NewGuid();
DateTime dateTest = new DateTime(2008, 01, 01, 0, 0, 0, DateTimeKind.Utc);
decimal valueTest = 0m;
object[] idValues = new object[batchSize];
object[] dateValues = new object[batchSize];
object[] valuesValues = new object[batchSize];
for (int i = 0; i < idValues.Length; i++)
{
idValues[i] = idTest.ToByteArray();
dateValues[i] = dateTest;
valuesValues[i] = valueTest;
dateTest = dateTest.AddDays(1);
valueTest++;
}
// request
using (OracleConnection dbConnection = new OracleConnection(GetConnectionString()))
{
dbConnection.Open();
using (OracleTransaction dbTransaction = dbConnection.BeginTransaction(IsolationLevel.ReadCommitted))
{
using (OracleCommand dbCommand = dbConnection.CreateCommand())
{
dbCommand.Transaction = dbTransaction;
dbCommand.CommandTimeout = 0;
dbCommand.CommandText = "insert into TESTARRAYBIND (ID, DATA_DATETIME, DATA_VALUE) values (:prmID, :prmDATA_DATETIME, :prmDATA_VALUE)";
AddParameter(dbCommand, "prmID", DbType.Binary, idValues);
AddParameter(dbCommand, "prmDATA_DATETIME", DbType.DateTime, dateValues);
AddParameter(dbCommand, "prmDATA_VALUE", DbType.Decimal, valuesValues);
dbCommand.ExecuteArray(valuesValues.Length);
dbCommand.Parameters.Clear();
}
dbTransaction.Commit();
}
dbConnection.Close();
}
}
private static void AddParameter(OracleCommand dbCommand, string name, DbType dbType, object[] idValues)
{
OracleParameter param = dbCommand.CreateParameter();
param.ParameterName = name;
param.DbType = dbType;
param.Direction = ParameterDirection.Input;
param.Value = idValues;
dbCommand.Parameters.Add(param);
}
Why such a difference in time ?
Sincerely