Beispiel #1
0
 /// <summary>
 /// 在连接池中申请一个连接,线程安全
 /// </summary>
 /// <param name="key">申请者</param>
 /// <param name="cl">申请的连接级别</param>
 /// <returns>返回申请到的连接</returns>
 public DbConnection GetConnectionFormPool(object key, ConnLevel cl)
 {
     lock (this)
     {
         if (_ps != PoolState.Run)
         {
             throw new StateException();//服务状态错误
         }
         if (hs_UseConn.Count == MaxConnectionFormPool)
         {
             throw new PoolFullException();//连接池已经饱和,不能提供连接
         }
         if (hs_UseConn.ContainsKey(key))
         {
             throw new KeyExecption();//一个key对象只能申请一个连接
         }
         if (cl == ConnLevel.ReadOnly)
         {
             return(GetConnectionFormPool_ReadOnly(key));//ReadOnly级别
         }
         else if (cl == ConnLevel.High)
         {
             return(GetConnectionFormPool_High(key));//High级别
         }
         else if (cl == ConnLevel.None)
         {
             return(GetConnectionFormPool_None(key));//None级别
         }
         else
         {
             return(GetConnectionFormPool_Bottom(key));//Bottom级别
         }
     }
 }
Beispiel #2
0
 /// <summary>
 /// 返回DbConnection对象,同时做获得连接时的必要操作
 /// </summary>
 /// <param name="key">key</param>
 /// <param name="cs">ConnStruct对象</param>
 /// <param name="cl">级别</param>
 /// <param name="readOnly">是否为只读属性</param>
 /// <returns></returns>
 private DbConnection GetConnectionFormPool_Return(object key, ConnStruct cs, ConnLevel cl)
 {
     try
     {
         if (cs == null)
         {
             throw new Exception();
         }
         cs.Repeat();
         hs_UseConn.Add(key, cs);
         if (cl == ConnLevel.ReadOnly)
         {
             cs.Allot    = false;
             cs.IsRepeat = false;
         }
     }
     catch (Exception e)
     {
         throw new OccasionExecption();//连接资源耗尽,或错误的访问时机。
     }
     finally
     {
         UpdateAttribute();//更新属性
     }
     return(cs.Connection);
 }
Beispiel #3
0
 /// <summary>
 /// 在连接池中申请一个连接,线程安全
 /// </summary>
 /// <param name="key">申请者</param>
 /// <param name="cl">申请的连接级别</param>
 /// <returns>返回申请到的连接</returns>
 public DbConnection GetConnectionFormPool(object key, ConnLevel cl)
 {
     lock (this)
     {
         if (_ps != PoolState.Run)
         {
             throw new StateException();//服务状态错误
         }
         if (hs_UseConn.ContainsKey(key))
         {
             //throw new KeyExecption();//一个key对象只能申请一个连接
             ConnStruct cs = (ConnStruct)hs_UseConn[key];
             cs.LastRunTime = DateTime.Now;
             if (cs.State == ConnectionState.Open)
             {
                 return(cs.Connection);
             }
             else
             {
                 hs_UseConn.Remove(key);
                 return(GetConnectionFormPool_High(key));//High级别
             }
         }
         if (hs_UseConn.Count == MaxConnectionFormPool)
         {
             throw new PoolFullException();//连接池已经饱和,不能提供连接
         }
         if (cl == ConnLevel.ReadOnly)
         {
             return(GetConnectionFormPool_ReadOnly(key));//ReadOnly级别
         }
         else if (cl == ConnLevel.High)
         {
             return(GetConnectionFormPool_High(key));//High级别
         }
         else if (cl == ConnLevel.None)
         {
             return(GetConnectionFormPool_None(key));//None级别
         }
         else
         {
             return(GetConnectionFormPool_Bottom(key));//Bottom级别
         }
     }
 }