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);
}