This problem only occurs when opening connections on two different threads and only under OraDirect. When using ODP.NET with this same code (comment out CoreLab using clause and put in Oracle.DataAccess using clause) it works just fine.
Something inside OraDirect seems to cause a problem in this scenario.
Code: Select all
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using CoreLab.Oracle;
//using Oracle.DataAccess.Client;
namespace ConsoleApplication8
{
class Program
{
static private OracleConnection _conn1;
static private OracleConnection _conn2;
static private string _connectionString = "User Id=pss;Password=pss;Data Source=NEMT14;Pooling=false";
static private void Method()
{
Console.WriteLine("{0:HH-mm-ss}: Making second connection", DateTime.Now);
try
{
_conn2 = new OracleConnection(_connectionString);
_conn2.Open();
Console.WriteLine("{0:HH-mm-ss}: Established second connection", DateTime.Now);
}
catch (Exception ex)
{
Console.WriteLine("{0:HH-mm-ss}: Second connection failed\n{1}", DateTime.Now, ex.ToString());
}
}
static private void Runner()
{
while (true)
{
Thread.Sleep(1000);
Method();
Thread.Sleep(1000000);
}
}
static void Main(string[] args)
{
Console.WriteLine("{0:HH-mm-ss}: Making first connection", DateTime.Now);
_conn1 = new OracleConnection(_connectionString);
_conn1.Open();
Console.WriteLine("{0:HH-mm-ss}: Established first connection", DateTime.Now);
Thread thread = new Thread(Runner);
thread.IsBackground = true;
thread.Start();
Console.ReadLine();
}
}
}