1、使用程序集Oracle.ManagedDataAccess.dll
using Oracle.ManagedDataAccess.Client;
using System.Configuration;namespace ClassLibrary1
{ /// /// 数据库连接练习单例模式 /// public class oracledbconect { private static OracleConnection con = null; private static object obj = new object(); /// /// 定义公共静态属性instance,外部调用 /// public static OracleConnection instance { get { // 当第一个线程运行到这里时,此时会对locker对象 "加锁", // 当第二个线程运行该方法时,首先检测到locker对象为"加锁"状态,该线程就会挂起等待第一个线程解锁 // lock语句运行完之后(即线程运行完之后)会对该对象"解锁" // 双重锁定只需要一句判断就可以了 if (con==null) { lock (obj) { if (con==null) { var str = ConfigurationManager.ConnectionStrings["DBcontection"].ConnectionString;//获取配置文件中的数据库连接字符串 con = new OracleConnection(str);//实例化 try { con.Open(); } catch (Exception e) { return null; } } } } return con; } }// 私有构造函数是一种特殊的实例构造函数。它通常用在只包含静态成员的类中。 // 如果类具有一个或多个私有构造函数而没有公共构造函数,则其他类(除嵌套类外)无法创建该类的实例。 //声明空构造函数可阻止自动生成默认构造函数,因为当编译器看到我们的类中没有定义构造函数时,编译器会帮我们生成一个公有的无参构造函数。 //注意,如果您不对构造函数使用访问修饰符,则在默认情况下它仍为私有构造函数。 // 但是,通常显式地使用 private 修饰符来清楚地表明该类不能被实例化。 private oracledbconect() { }}
}