c#之使用单例模式实现数据库连接

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() { }
}

}

转载于:https://www.cnblogs.com/MinLee/p/8384127.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来解答您的问题。 首先,工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而单例模式则是一种保证一个类只有一个实例的设计模式。 在 C# 中,我们可以将这两种模式结合使用来操作数据库。具体实现步骤如下: 1. 创建一个接口 IDbHelper,用于定义数据库操作的方法。 ```csharp interface IDbHelper { void Connect(); void Execute(string sql); } ``` 2. 创建一个工厂类 DbFactory,用于创建 IDbHelper 接口的实例。 ```csharp class DbFactory { private static IDbHelper instance = null; public static IDbHelper GetInstance() { if (instance == null) { instance = new SqlDbHelper(); // 这里以 SqlServer 数据库为例 } return instance; } } ``` 3. 创建一个单例类 SqlDbHelper,实现 IDbHelper 接口中的方法。 ```csharp class SqlDbHelper : IDbHelper { private static SqlDbHelper instance = null; private SqlConnection conn = null; private SqlCommand cmd = null; private SqlDbHelper() { // 连接数据库 conn = new SqlConnection("数据库连接字符串"); conn.Open(); // 创建 Command 对象 cmd = new SqlCommand(); cmd.Connection = conn; } public static SqlDbHelper GetInstance() { if (instance == null) { instance = new SqlDbHelper(); } return instance; } public void Connect() { // 连接数据库 conn.Open(); } public void Execute(string sql) { // 执行 SQL 语句 cmd.CommandText = sql; cmd.ExecuteNonQuery(); } } ``` 4. 使用示例: ```csharp // 获取 SqlDbHelper 实例 IDbHelper dbHelper = DbFactory.GetInstance(); // 连接数据库 dbHelper.Connect(); // 执行 SQL 语句 dbHelper.Execute("SELECT * FROM user"); ``` 当我们需要操作数据库时,只需要通过工厂类获取 IDbHelper 接口的实例,然后调用其方法即可。由于 SqlDbHelper 类采用了单例模式,因此每次获取到的实例都是同一个,避免了频繁创建对象的开销,提高了程序的性能。 希望这个示例能够帮助您理解工厂模式和单例模式使用,以及如何在 C# 中操作数据库。如果您有其他问题,欢迎随时咨询我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值