|
|
|
 |
 |
Исходник |
 |
|
 |
 |
|
Автор:
|
|
|
Название:
|
Свой конекшин пул |
|
Дата:
|
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 |
|
|
 |
 |
 |
 |
|
|