static object obj = new object();
static int _idx;
static int getIdx()
{ lock (obj)
{ _idx++;
return _idx;
}
}
static void testOraTrn1()
{ using (OracleConnection cn = new OracleConnection(cnStr))
{ cn.Open();
OracleTransaction trn = cn.BeginTransaction();
OracleCommand cmd = new OracleCommand();
cmd.Connection = cn;
cmd.Transaction = trn;
cmd.CommandText = "INSERT INTO Jeffrey Values (:EmpNo, :EmpName)";
OracleParameter pEmpNo =
cmd.Parameters.Add("EmpNo", OracleType.Int32); OracleParameter pEmpName =
cmd.Parameters.Add("EmpName", OracleType.VarChar); try
{ pEmpNo.Value = getIdx();
pEmpName.Value = "T1-1st";
cmd.ExecuteNonQuery();
pEmpNo.Value = getIdx();
pEmpName.Value = "T1-2nd";
cmd.ExecuteNonQuery();
pEmpNo.Value = getIdx();
pEmpName.Value = "T1-3rd";
cmd.ExecuteNonQuery();
trn.Commit();
}
catch
{ trn.Rollback();
}
}
}
static void testOraTrn2()
{ using (ODP.OracleConnection cn =
new Oracle.DataAccess.Client.OracleConnection(cnStr))
{ cn.Open();
ODP.OracleTransaction trn = cn.BeginTransaction();
ODP.OracleCommand cmd = cn.CreateCommand();
cmd.Connection = cn;
cmd.CommandText = "INSERT INTO Jeffrey Values (:EmpNo, :EmpName)";
ODP.OracleParameter pEmpNo =
cmd.Parameters.Add("EmpNo", ODP.OracleDbType.Int32); ODP.OracleParameter pEmpName =
cmd.Parameters.Add("EmpName", ODP.OracleDbType.Varchar2); try
{ pEmpNo.Value = getIdx();
pEmpName.Value = "T2-1st";
cmd.ExecuteNonQuery();
pEmpNo.Value = getIdx();
pEmpName.Value = "T2-2nd";
cmd.ExecuteNonQuery();
pEmpNo.Value = getIdx();
pEmpName.Value = "T2-3rd";
cmd.ExecuteNonQuery();
trn.Commit();
}
catch
{ trn.Rollback();
}
}
}
static void testOraTrn3()
{ using (TransactionScope tx = new TransactionScope())
{ using (OracleConnection cn = new OracleConnection(cnStr))
{ cn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = cn;
cmd.CommandText = "INSERT INTO Jeffrey Values (:EmpNo, :EmpName)";
OracleParameter pEmpNo =
cmd.Parameters.Add("EmpNo", OracleType.Int32); OracleParameter pEmpName =
cmd.Parameters.Add("EmpName", OracleType.VarChar); try
{ pEmpNo.Value = getIdx();
pEmpName.Value = "T3-1st";
cmd.ExecuteNonQuery();
pEmpNo.Value = getIdx();
pEmpName.Value = "T3-2nd";
cmd.ExecuteNonQuery();
pEmpNo.Value = getIdx();
pEmpName.Value = "T3-3rd";
cmd.ExecuteNonQuery();
tx.Complete();
}
catch
{ //Log error or something
}
}
}
}
static void trnTest(int testNo)
{ int times = 5;
long total = 0;
for (int i = 0; i < times; i++)
{ Stopwatch sw = new Stopwatch();
sw.Start();
switch (testNo)
{ case 1:
testOraTrn1(); break;
case 2:
testOraTrn2(); break;
case 3:
testOraTrn3(); break;
}
sw.Stop();
Console.WriteLine("TEST{0}-{1:00} {2}ms", testNo, i, sw.ElapsedMilliseconds);
total += sw.ElapsedMilliseconds;
}
Console.WriteLine("TEST{0} Avg = {1}ms", testNo, total / times);
}