DBPool.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Data.SqlClient;
  5. using System.Text;
  6. namespace ConnectionPool.test
  7. {
  8. public class DBPool
  9. {
  10. private class SqlConnectionObject : IDynamicObject
  11. {
  12. private SqlConnection _SqlConn;
  13. public SqlConnectionObject()
  14. {
  15. _SqlConn = null;
  16. }
  17. #region IDynamicObject Members
  18. public void Create(Object param)
  19. {
  20. String strConn = (String)param;
  21. _SqlConn = new SqlConnection(strConn);
  22. _SqlConn.Open();
  23. }
  24. public Object GetInnerObject()
  25. {
  26. // TODO: Add SqlConnectionObject.GetInnerObject implementation
  27. return _SqlConn;
  28. }
  29. public bool IsValidate()
  30. {
  31. return (_SqlConn != null
  32. && _SqlConn.GetHashCode() > 0
  33. && _SqlConn.State == ConnectionState.Open);
  34. }
  35. public void Release()
  36. {
  37. // TODO: Add SqlConnectionObject.Release implementation
  38. _SqlConn.Close();
  39. }
  40. #endregion
  41. }
  42. private ObjectPool _Connections;
  43. public DBPool(string connection, int initcount, int capacity)
  44. {
  45. if (connection == null || connection == "" || initcount < 0 || capacity < 1)
  46. {
  47. throw (new Exception("Invalid parameter!"));
  48. }
  49. _Connections = new ObjectPool(typeof(SqlConnectionObject), connection, initcount, capacity);
  50. }
  51. public SqlConnection GetConnection()
  52. {
  53. return (SqlConnection)_Connections.GetOne();
  54. }
  55. public void FreeConnection(SqlConnection sqlConn)
  56. {
  57. _Connections.FreeObject(sqlConn);
  58. }
  59. public void Release()
  60. {
  61. _Connections.Release();
  62. }
  63. public int Count
  64. {
  65. get { return _Connections.CurrentSize; }
  66. }
  67. public int UsingCount
  68. {
  69. get { return _Connections.ActiveCount; }
  70. }
  71. public int DecreaseSize(int size)
  72. {
  73. return _Connections.DecreaseSize(size);
  74. }
  75. } // DBPool
  76. }