using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Data.Common;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Data.Common;
using System.Data;
using System.Data.SqlClient;
namespace DBTest
{
/// <summary>
/// DB链接基类
/// </summary>
public abstract class DbConnectionBase
{
public DbConnectionBase() { }
/// <summary>
/// 数据库链接字符串
/// </summary>
protected string m_dbConnStr;
/// <summary>
/// 错误代码
/// </summary>
protected string m_errMsg;
/// <summary>
/// 设置数据库链接信息
/// </summary>
/// <param name="connStr"></param>
public void SetConnectionString(string connStr)
{
this.m_dbConnStr = connStr;
}
/// 设置数据库链接信息
/// </summary>
/// <param name="connStr"></param>
public void SetConnectionString(string connStr)
{
this.m_dbConnStr = connStr;
}
/// <summary>
/// 获取错误信息
/// </summary>
/// <returns></returns>
public string GetErrMsg()
{
return m_errMsg;
}
/// 获取错误信息
/// </summary>
/// <returns></returns>
public string GetErrMsg()
{
return m_errMsg;
}
public abstract bool IsOpen();
/ <summary>
/ 判断连接是否打开
/ </summary>
/ <returns></returns>
//public bool IsOpen()
//{
// return m_bOpen;
//}
/ 判断连接是否打开
/ </summary>
/ <returns></returns>
//public bool IsOpen()
//{
// return m_bOpen;
//}
/// <summary>
/// 打开数据库链接
/// </summary>
public abstract void Open();
/// <summary>
///关闭数据库链接
/// </summary>
public abstract void Close();
}
/// 打开数据库链接
/// </summary>
public abstract void Open();
/// <summary>
///关闭数据库链接
/// </summary>
public abstract void Close();
}
public class MSSqlConnection:DbConnectionBase
{
private SqlConnection m_mssqlConn;
public MSSqlConnection()
{
m_mssqlConn = new SqlConnection();
}
{
private SqlConnection m_mssqlConn;
public MSSqlConnection()
{
m_mssqlConn = new SqlConnection();
}
public override void Open()
{
try
{
m_mssqlConn.ConnectionString = m_dbConnStr;
m_mssqlConn.Open();
}
catch(Exception ex)
{
m_errMsg = ex.Message;
m_errMsg += "\n";
m_errMsg += ex.StackTrace;
}
}
{
try
{
m_mssqlConn.ConnectionString = m_dbConnStr;
m_mssqlConn.Open();
}
catch(Exception ex)
{
m_errMsg = ex.Message;
m_errMsg += "\n";
m_errMsg += ex.StackTrace;
}
}
public override bool IsOpen()
{
return m_mssqlConn.State == ConnectionState.Open;
}
{
return m_mssqlConn.State == ConnectionState.Open;
}
public override void Close()
{
m_mssqlConn.Close();
}
{
m_mssqlConn.Close();
}
public SqlConnection GetRawConn()
{
return m_mssqlConn;
}
}
/// <summary>
/// 数据库链接池基类
/// </summary>
/// <typeparam name="TDbConn"></typeparam>
public abstract class DbConnPool<TDbConn> where TDbConn : DbConnectionBase
{
/// <summary>
/// 数据库链接字符串
/// </summary>
protected string m_dbConnStr = string.Empty;
/// <summary>
/// 数据库链接池容器
/// </summary>
private Stack<TDbConn> m_lstConn = new Stack<TDbConn>();
/// <summary>
/// 信号量
/// </summary>
private Semaphore m_sem;
/// <summary>
/// 链接保活的数量,默认为1个
/// </summary>
private int m_keepAliveNum = 1;
/// <summary>
/// 连接池支持最大的连接数量
/// </summary>
private int m_maxConnNum = 10;
/// <summary>
/// 错误信息
/// </summary>
protected string m_errMsg;
/// <summary>
/// 是否已经初始化标记
/// </summary>
private bool m_bInit = false;
//private static object m_mutex = new object();
/// <summary>
/// 初始化锁类
/// </summary>
private static object m_iniMutex = new object();
public string GetErrMsg()
{
return m_errMsg;
}
{
return m_mssqlConn;
}
}
/// <summary>
/// 数据库链接池基类
/// </summary>
/// <typeparam name="TDbConn"></typeparam>
public abstract class DbConnPool<TDbConn> where TDbConn : DbConnectionBase
{
/// <summary>
/// 数据库链接字符串
/// </summary>
protected string m_dbConnStr = string.Empty;
/// <summary>
/// 数据库链接池容器
/// </summary>
private Stack<TDbConn> m_lstConn = new Stack<TDbConn>();
/// <summary>
/// 信号量
/// </summary>
private Semaphore m_sem;
/// <summary>
/// 链接保活的数量,默认为1个
/// </summary>
private int m_keepAliveNum = 1;
/// <summary>
/// 连接池支持最大的连接数量
/// </summary>
private int m_maxConnNum = 10;
/// <summary>
/// 错误信息
/// </summary>
protected string m_errMsg;
/// <summary>
/// 是否已经初始化标记
/// </summary>
private bool m_bInit = false;
//private static object m_mutex = new object();
/// <summary>
/// 初始化锁类
/// </summary>
private static object m_iniMutex = new object();
public string GetErrMsg()
{
return m_errMsg;
}
public void SetDbConnStr(string connStr)
{
if (string.IsNullOrEmpty(m_dbConnStr))
{
this.m_dbConnStr = connStr;
}
}
public void SetAliveConnNum(int keepAliveNum)
{
this.m_keepAliveNum = keepAliveNum;
}
public void SetMaxConnNum(int maxNum)
{
this.m_maxConnNum = maxNum;
}
//
{
if (string.IsNullOrEmpty(m_dbConnStr))
{
this.m_dbConnStr = connStr;
}
}
public void SetAliveConnNum(int keepAliveNum)
{
this.m_keepAliveNum = keepAliveNum;
}
public void SetMaxConnNum(int maxNum)
{
this.m_maxConnNum = maxNum;
}
//