Rambler's Top100
Главная
Новости
Статьи
Форумы
Книги
Коды
Сообщество
Блоги
О нас
 

Логин

Email:
  Пароль:

Войти
Зарегистрироваться
Забыл пароль

Поиск

 Искать :
 
Вперед

Книги по теме

Искать:
в:
Порядок:

Исходник

Автор:

Nik Legaloff

 
Название:

Свой конекшин пул

Дата: 10 August 2005
Описание: См http://aspnetmania.com/Blogs/Post/274.html 
  Разместить ссылку на этот исходник в форуме вы можете вставив в текст сообщения следующую строку: [CODEPOST ID=153]Свой конекшин пул[/CODEPOST]
Оценка: Проголосовало 4 посетителей, средняя оценка 4.25
Оценить:
  1 using System.Configuration;
  2 using System.Data.SqlClient;
  3 
  4 namespace Nik.ORM.DataSource.MSSqlCLient
  5 {
  6 	/// <summary>
  7 	/// Мэнэджер  ссоединений с MSSQLсервером
  8 	/// </summary>
  9 	public class ConnectionFactory
 10 	{
 11 		private static string cstr;
 12 
 13 /// <summary>
 14 /// ConnectionString для текущего приложения указанный config файле 
 15 /// </summary>
 16 public static string CStr
 17 {
 18 	get
 19 	{
 20 
 21 		lock(cstrLock)
 22 		{
 23 			try
 24 			{
 25 				if (cstr == null)
 26 				{
 27 					AppSettingsReader reader = new AppSettingsReader();
 28 					cstr = reader.GetValue("ConnectionString", typeof(string)).ToString();
 29 				}
 30 			}
 31 			catch
 32 			{
 33 				cstr = "connectionString по умолчанию";
 34 				
 35 			}
 36 			return cstr;
 37 		}
 38 
 39 
 40 	}
 41 }
 42 
 43 		/// <summary>
 44 		/// Получить новое соединение
 45 		/// </summary>
 46 		/// <returns>новое соединение</returns>
 47 		public static SqlConnection GetNewConnection()
 48 		{
 49 			// просто каждый раз создаём новое соединение
 50 			SqlConnection conection1 = new SqlConnection(CStr);
 51 			return conection1;
 52 		}
 53 		private static object cstrLock = new object();
 54 	}
 55 }
 56 
 57 using System;
 58 using System.Collections;
 59 using System.Data;
 60 using System.Data.SqlClient;
 61 
 62 namespace Nik.ORM.DataSource.MSSqlCLient
 63 {
 64 	public class ConnectionPool : IDisposable
 65 	{
 66 		ArrayList open = new ArrayList();
 67 		ArrayList closed = new ArrayList();
 68 		ArrayList active = new ArrayList();
 69 		private object lockObj=new object() ;
 70 
 71 		public ConnectionPool()
 72 		{
 73 		}
 74 
 75 		public SqlConnection GetConnection()
 76 		{ 
 77 			lock(lockObj)
 78 			{
 79 				SqlConnection result;
 80 				if (open.Count>0)
 81 				{
 82 					result=(SqlConnection) open[0];
 83 					open.Remove(result);
 84 					active.Add(result);
 85 					return result;
 86 				}
 87 
 88 				if (closed.Count>0)
 89 				{
 90 					result=(SqlConnection) closed[0];
 91 					closed.Remove(result);
 92 					active.Add(result);
 93 					return result;
 94 				}
 95 				result = ConnectionFactory.GetNewConnection();
 96 				active.Add(result);
 97 				result.Open();
 98 				return result;
 99 			}
100 		}
101 
102 		public void ReturnBackConnection(SqlConnection connection)
103 		{
104 			lock(lockObj)
105 			{
106 
107 				if (active.Contains(connection))
108 				{
109 					active.Remove(connection);
110 				}
111 
112 
113 				if (connection.State==ConnectionState.Open)
114 				{
115 					if (!open.Contains(connection)) open.Add(connection);
116 
117 				}
118 				else
119 				{
120 					if (!closed.Contains(connection))
121 					{
122 						closed.Add(connection);
123 					}
124 
125 				}
126 			}
127 		}
128 		#region IDisposable Members
129 
130 		public void Dispose()
131 		{
132 			lock(lockObj)
133 			{
134 				foreach (SqlConnection connection in open)
135 				{
136 					closeIt(connection);
137 				}
138 				foreach (SqlConnection connection in active)
139 				{
140 					closeIt(connection);
141 				}
142 				foreach (SqlConnection connection in closed)
143 				{
144 					closeIt(connection);
145 				}
146 			}
147 		}
148 
149 		#endregion
150 
151 		private void closeIt(SqlConnection connection)
152 		{
153 			if (connection.State!=ConnectionState.Closed)
154 			{
155 				try
156 				{
157 					connection.Close();
158 				}
159 				catch{}
160 			}
161 			
162 		}
163 
164 	}
165 }
166 
Вернуться к списку исходников в категории ADO.NET
 
Apartments for Rent

Rambler's Top100
Рейтинг@Mail.ru
Идея: Dimon aka Manowar Программирование: Dimon aka Manowar Дизайн: Dan Lebedev
Хостинг от компании Parking.ru
Карта сайта