annotate Source/Data/DbManager.Config.cs @ 5:f7d63a092920

Исправлено условие Where в тех случаях, когда репозитарий не является генериком
author cin
date Tue, 10 Mar 2015 16:02:11 +0300
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Collections;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Collections.Generic;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Configuration;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using System.Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using System.Data.SqlClient;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using System.Diagnostics;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using System.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 namespace BLToolkit.Data
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 using Configuration;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 using DataProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 using Properties;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 public partial class DbManager
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 #region Constructors
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 /// Initializes a new instance of the <see cref="DbManager"/> class
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 /// and opens a database connection.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 /// <para>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 /// This constructor uses a configuration, which has been used first in your application.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 /// If there has been no connection used before, an empty string is applied as a default configuration.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 /// </para>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 /// <para>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 /// See the <see cref="ConfigurationString"/> property
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 /// for an explanation and use of the default configuration.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 /// </para>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 /// <include file="Examples.xml" path='examples/db[@name="ctor"]/*' />
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 /// <seealso cref="AddConnectionString(string)"/>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 /// <returns>An instance of the database manager class.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 [DebuggerStepThrough]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 public DbManager() : this(DefaultConfiguration)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 /// Initializes a new instance of the <see cref="DbManager"/> class
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 /// and opens a database connection for the provided configuration.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 /// See the <see cref="ConfigurationString"/> property
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 /// for an explanation and use of the configuration string.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 /// <include file="Examples.xml" path='examples/db[@name="ctor(string)"]/*' />
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 /// <param name="configurationString">Configuration string.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 /// <returns>An instance of the <see cref="DbManager"/> class.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 [DebuggerStepThrough]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 public DbManager(string configurationString)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 : this(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 GetDataProvider (configurationString),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 GetConnectionString(configurationString))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 _configurationString = configurationString;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 /// Initializes a new instance of the <see cref="DbManager"/> class
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 /// and opens a database connection for the provided configuration.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 /// See the <see cref="ConfigurationString"/> property
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 /// for an explanation and use of the configuration string.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 /// <param name="configuration">Configuration string not containing provider name.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 /// <param name="providerName">Provider configuration name.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 /// <returns>An instance of the <see cref="DbManager"/> class.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 [DebuggerStepThrough]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 public DbManager(string providerName, string configuration)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 : this(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 GetDataProvider (providerName + ProviderNameDivider + configuration),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 GetConnectionString(providerName + ProviderNameDivider + configuration))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 _configurationString = providerName + ProviderNameDivider + configuration;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 /// Initializes a new instance of the <see cref="DbManager"/> class for the provided connection.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 /// This constructor tries to open the connection if the connection state equals
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 /// <see cref="System.Data.ConnectionState">ConnectionState.Closed</see>.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 /// In this case the <see cref="IDbConnection.ConnectionString"/> property of the connection
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 /// must be set before colling the constructor.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 /// Otherwise, it neither opens nor closes the connection.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 /// <exception cref="DataException">
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 /// Type of the connection could not be recognized.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 /// </exception>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 /// <include file="Examples.xml" path='examples/db[@name="ctor(IDbConnection)"]/*' />
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 /// <param name="connection">An instance of the <see cref="IDbConnection"/> class.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 /// <returns>An instance of the <see cref="DbManager"/> class.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 [DebuggerStepThrough]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 public DbManager(IDbConnection connection)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 : this(GetDataProvider(connection), connection)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 /// Initializes a new instance of the <see cref="DbManager"/> class for the provided transaction.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 /// <include file="Examples.xml" path='examples/db[@name="ctor(IDbTransaction)"]/*' />
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 /// <param name="transaction"></param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 [DebuggerStepThrough]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 public DbManager(IDbTransaction transaction)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 : this(GetDataProvider(transaction.Connection), transaction)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 /*
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 /// Initializes a new instance of the <see cref="DbManager"/> class
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 /// and opens a database connection for the provided configuration and database connection.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 /// <para>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 /// This constructor opens the connection only if the connection state equals
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 /// <see cref="System.Data.ConnectionState">ConnectionState.Closed</see>.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 /// Otherwise, it neither opens nor closes the connection.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 /// </para>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 /// <para>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 /// See the <see cref="ConfigurationString"/> property
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 /// for an explanation and use of the configuration string.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 /// </para>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 /// <include file="Examples.xml" path='examples/db[@name="ctor(IDbConnection,string)"]/*' />
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 /// <param name="connection">An instance of the <see cref="IDbConnection"/>.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 /// <param name="configurationString">The configuration string.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 /// <returns>An instance of the <see cref="DbManager"/> class.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 [DebuggerStepThrough]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 public DbManager(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 IDbConnection connection,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 string configurationString)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 if (connection == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 Init(configurationString);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 if (configurationString != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 OpenConnection(configurationString);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 Init(connection);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 _configurationString = configurationString;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 _connection.ConnectionString = GetConnectionString(configurationString);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 if (_connection.State == ConnectionState.Closed)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 OpenConnection();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 */
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 #region Public Properties
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 private string _configurationString;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 /// Gets the string used to open a database.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 /// <value>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 /// A string containing configuration settings.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 /// </value>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 /// <para>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 /// An actual database connection string is read from the <i>appSettings</i> section
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 /// of application configuration file (App.config, Web.config, or Machine.config)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 /// according to the follow rule:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 /// </para>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 /// <code>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 /// &lt;appSettings&gt;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 /// &lt;add
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 /// key = "ConnectionString.<b>configurationString</b>"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 /// va<i></i>lue = "Server=(local);Database=Northwind;Integrated Security=SSPI" /&gt;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 /// &lt;/appSettings&gt;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 /// </code>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 /// <para>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 /// If the configuration string is empty, the following rule is applied:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 /// </para>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 /// <code>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 /// &lt;appSettings&gt;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 /// &lt;add
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 /// key = "ConnectionString"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 /// va<i></i>lue = "Server=(local);Database=Northwind;Integrated Security=SSPI" /&gt;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 /// &lt;/appSettings&gt;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 /// </code>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 /// <para>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 /// If you don't want to use a configuration file, you can add a database connection string
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 /// using the <see cref="AddConnectionString(string)"/> method.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 /// </para>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 /// <para>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 /// The configuration string may have a prefix used to define a data provider. The following table
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 /// contains prefixes for all supported data providers:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 /// <list type="table">
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 /// <listheader><term>Prefix</term><description>Provider</description></listheader>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 /// <item><term>Sql</term><description>Data Provider for SQL Server</description></item>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 /// <item><term>OleDb</term><description>Data Provider for OLE DB</description></item>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 /// <item><term>Odbc</term><description>Data Provider for ODBC</description></item>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 /// <item><term>Oracle</term><description>Data Provider for Oracle</description></item>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 /// </list>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 /// </para>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 /// <seealso cref="AddConnectionString(string)"/>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 public string ConfigurationString
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 [DebuggerStepThrough]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 get { return _configurationString; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 #region Config Overrides
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 protected virtual void InitDataProvider(IDbConnection connection)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 DataProvider = GetDataProvider(connection);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 protected virtual IDbConnection CloneConnection()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 if (Connection is ICloneable || ConfigurationString == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 return _dataProvider.CloneConnection(_connection);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 var con = DataProvider.CreateConnectionObject();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 con.ConnectionString = GetConnectionString(ConfigurationString);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 return con;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 protected virtual string GetConnectionHash()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 return ConfigurationString ?? Connection.ConnectionString.GetHashCode().ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 #region Protected Static Members
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 static DbManager()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 AddDataProvider(new Sql2012DataProvider());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 AddDataProvider(new Sql2008DataProvider());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251 AddDataProvider(new Sql2005DataProvider());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 AddDataProvider(new SqlDataProvider());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 AddDataProvider(new Sql2000DataProvider());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 AddDataProvider(new AccessDataProvider());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 AddDataProvider(new OleDbDataProvider());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 AddDataProvider(new OdbcDataProvider());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258 var section = BLToolkitSection.Instance;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 if (section != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 _defaultConfiguration = section.DefaultConfiguration;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 foreach (DataProviderElement provider in section.DataProviders)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 var dataProviderType = Type.GetType(provider.TypeName, true);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 var providerInstance = (DataProviderBase)Activator.CreateInstance(dataProviderType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 if (!string.IsNullOrEmpty(provider.Name))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 providerInstance.UniqueName = provider.Name;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 providerInstance.Configure(provider.Attributes);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274 AddDataProvider(providerInstance);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276 if (!provider.Default)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277 continue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 if (_defaultDataProviderName != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 throw new ConfigurationErrorsException(string.Format(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282 Resources.DbManager_MoreThenOneDefaultProvider, _defaultDataProviderName, providerInstance.UniqueName),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283 provider.ElementInformation.Source, provider.ElementInformation.LineNumber);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286 _defaultDataProviderName = providerInstance.UniqueName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
289
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
290 var dataProviders = ConfigurationManager.AppSettings.Get("BLToolkit.DataProviders");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
291
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
292 if (dataProviders != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
293 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
294 if (TraceSwitch.TraceWarning)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
295 WriteTraceLine("Using appSettings\\BLToolkit.DataProviders is obsolete. Consider using bltoolkit configuration section instead.", TraceSwitch.DisplayName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
296
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
297 foreach (var dataProviderTypeName in dataProviders.Split(';'))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
298 AddDataProvider(Type.GetType(dataProviderTypeName, true));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
299 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
300
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
301 if (string.IsNullOrEmpty(_defaultConfiguration))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
302 _defaultConfiguration = ConfigurationManager.AppSettings.Get("BLToolkit.DefaultConfiguration");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
303
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
304 if (string.IsNullOrEmpty(_defaultDataProviderName))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
305 _defaultDataProviderName = SqlDataProviderBase.NameString;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
306 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
307
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
308 volatile static string _firstConfiguration;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
309 private static DataProviderBase _firstProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
310 private static readonly Hashtable _configurationList = Hashtable.Synchronized(new Hashtable());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
311 private static readonly Hashtable _anyProviderConfigurationList = Hashtable.Synchronized(new Hashtable());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
312
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
313 private static DataProviderBase GetDataProvider(IDbConnection connection)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
314 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
315 if (connection == null) throw new ArgumentNullException("connection");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
316
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
317 var dp = _dataProviderTypeList[connection.GetType()];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
318
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
319 if (dp == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
320 throw new DataException(string.Format(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
321 Resources.DbManager_UnknownConnectionType, connection.GetType().FullName));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
322
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
323 return dp;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
324 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
325
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
326 public static DataProviderBase GetDataProvider(string configurationString)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
327 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
328 if (configurationString == null) throw new ArgumentNullException("configurationString");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
329
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
330 if (configurationString.StartsWith(AnyProvider))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
331 return FindFirstSuitableProvider(configurationString);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
332
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
333 if (configurationString == _firstConfiguration)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
334 return _firstProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
335
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
336 var dp = (DataProviderBase)_configurationList[configurationString];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
337
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
338 if (dp == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
339 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
340 var css = ConfigurationManager.ConnectionStrings[configurationString];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
341
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
342 if (css != null && !string.IsNullOrEmpty(css.ProviderName))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
343 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
344 string provider = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
345
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
346 if (css.ProviderName == "System.Data.SqlClient")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
347 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
348 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
349 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
350 using (SqlConnection sqlConnection = new SqlConnection(css.ConnectionString))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
351 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
352 sqlConnection.Open();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
353
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
354 string serverVersion = sqlConnection.ServerVersion;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
355 string[] serverVersionDetails = serverVersion.Split(new string[] {"."},
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
356 StringSplitOptions.None);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
357
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
358 int versionNumber = int.Parse(serverVersionDetails[0]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
359
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
360 switch (versionNumber)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
361 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
362 case 8: provider = "MSSQL2000"; break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
363 case 9: provider = "MSSQL2005"; break; //MSSQL 2005 -> Can the same as 2008
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
364 case 10: provider = "MSSQL2008"; break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
365 case 11: provider = "MSSQL2012"; break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
366 default: provider = "MSSQL2008"; break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
367 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
368 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
369 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
370 catch (Exception)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
371 {}
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
372 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
373
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
374 if (provider == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
375 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
376 // This hack should be redone.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
377 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
378 provider = css.ProviderName == "System.Data.SqlClient" ?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
379 configurationString.IndexOf("2012") >= 0 ? "MSSQL2012" :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
380 configurationString.IndexOf("2008") >= 0 ? "MSSQL2008" :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
381 configurationString.IndexOf("2000") >= 0 ? "MSSQL2000" :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
382 css.ProviderName :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
383 css.ProviderName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
384 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
385
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
386 dp = _dataProviderNameList[provider];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
387 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
388 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
389 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
390 // configurationString can be:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
391 // '' : default provider, default configuration;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
392 // '.' : default provider, default configuration;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
393 // 'foo.bar' : 'foo' provider, 'bar' configuration;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
394 // 'foo.' : 'foo' provider, default configuration;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
395 // 'foo' : default provider, 'foo' configuration or
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
396 // foo provider, default configuration;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
397 // '.foo' : default provider, 'foo' configuration;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
398 // '.foo.bar': default provider, 'foo.bar' configuration;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
399 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
400 // Default provider is SqlDataProvider
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
401 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
402 var cs = configurationString.ToUpper();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
403 var key = _defaultDataProviderName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
404
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
405 if (cs.Length > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
406 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
407 cs += ProviderNameDivider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
408
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
409 foreach (var k in _dataProviderNameList.Keys)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
410 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
411 if (cs.StartsWith(k + ProviderNameDivider))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
412 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
413 key = k;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
414 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
415 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
416 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
417 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
418
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
419 dp = _dataProviderNameList[key];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
420 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
421
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
422 if (dp == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
423 throw new DataException(string.Format(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
424 Resources.DbManager_UnknownDataProvider, configurationString));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
425
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
426 _configurationList[configurationString] = dp;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
427 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
428
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
429 if (_firstConfiguration == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
430 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
431 lock (_configurationList.SyncRoot)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
432 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
433 if (_firstConfiguration == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
434 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
435 _firstConfiguration = configurationString;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
436 _firstProvider = dp;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
437 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
438 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
439 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
440
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
441 return dp;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
442 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
443
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
444 private static bool IsMatchedConfigurationString(string configurationString, string csWithoutProvider)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
445 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
446 int dividerPos;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
447
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
448 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
449 !configurationString.StartsWith(AnyProvider) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
450 (dividerPos = configurationString.IndexOf(ProviderNameDivider)) >= 0 &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
451 0 == StringComparer.OrdinalIgnoreCase.Compare
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
452 (configurationString.Substring(dividerPos + ProviderNameDivider.Length), csWithoutProvider);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
453 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
454
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
455 private static DataProviderBase FindFirstSuitableProvider(string configurationString)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
456 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
457 var cs = (string)_anyProviderConfigurationList[configurationString];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
458 var searchRequired = (cs == null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
459
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
460 if (searchRequired)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
461 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
462 var csWithoutProvider = configurationString.Substring(AnyProvider.Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
463
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
464 if (configurationString.Length == 0) throw new ArgumentNullException("configurationString");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
465
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
466 foreach (var str in _connectionStringList.Keys)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
467 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
468 if (IsMatchedConfigurationString(str, csWithoutProvider))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
469 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
470 cs = str;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
471 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
472 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
473 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
474
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
475 if (cs == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
476 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
477 foreach (ConnectionStringSettings css in ConfigurationManager.ConnectionStrings)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
478 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
479 if (IsMatchedConfigurationString(css.Name, csWithoutProvider))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
480 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
481 cs = css.Name;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
482 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
483 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
484 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
485 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
486
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
487 if (cs == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
488 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
489 foreach (var name in ConfigurationManager.AppSettings.AllKeys)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
490 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
491 if (name.StartsWith("ConnectionString" + ProviderNameDivider))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
492 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
493 var str = name.Substring(name.IndexOf(ProviderNameDivider) + ProviderNameDivider.Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
494
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
495 if (IsMatchedConfigurationString(str, csWithoutProvider))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
496 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
497 cs = str;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
498 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
499 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
500 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
501 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
502 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
503
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
504 if (cs == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
505 cs = csWithoutProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
506 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
507
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
508 var dp = GetDataProvider(cs);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
509
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
510 if (searchRequired)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
511 _anyProviderConfigurationList[configurationString] = cs;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
512 return dp;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
513 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
514
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
515 private static readonly Dictionary<string,string> _connectionStringList = new Dictionary<string,string>(4);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
516
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
517 public static string GetConnectionString(string configurationString)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
518 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
519 // Use default configuration.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
520 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
521 if (configurationString == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
522 configurationString = DefaultConfiguration;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
523
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
524 if (_anyProviderConfigurationList.Contains(configurationString))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
525 configurationString = (string)_anyProviderConfigurationList[configurationString];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
526
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
527 string str;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
528
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
529 // Check cached strings first.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
530 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
531 if (!_connectionStringList.TryGetValue(configurationString, out str))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
532 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
533 lock (_dataProviderListLock)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
534 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
535 // Connection string is not in the cache.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
536 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
537 var key = string.Format("ConnectionString{0}{1}",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
538 configurationString.Length == 0? String.Empty: ProviderNameDivider, configurationString);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
539
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
540 var css = ConfigurationManager.ConnectionStrings[configurationString];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
541
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
542 str = css != null? css.ConnectionString: ConfigurationManager.AppSettings.Get(key);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
543
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
544 if (string.IsNullOrEmpty(str))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
545 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
546 throw new DataException(string.Format(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
547 Resources.DbManager_UnknownConfiguration, key));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
548 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
549
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
550 // Store the result in cache.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
551 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
552 _connectionStringList[configurationString] = str;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
553 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
554 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
555
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
556 return str;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
557 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
558
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
559 /*
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
560 private void OpenConnection(string configurationString)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
561 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
562 // If connection is already opened, we close it and open again.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
563 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
564 if (_connection != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
565 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
566 Dispose();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
567 GC.ReRegisterForFinalize(this);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
568 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
569
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
570 // Store the configuration string.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
571 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
572 _configurationString = configurationString;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
573
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
574 // Create and open the connection object.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
575 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
576 _connection = _dataProvider.CreateConnectionObject();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
577 _connection.ConnectionString = GetConnectionString(ConfigurationString);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
578
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
579 OpenConnection();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
580 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
581 */
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
582
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
583 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
584
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
585 #region AddDataProvider
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
586
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
587 static readonly Dictionary<string, DataProviderBase> _dataProviderNameList = new Dictionary<string, DataProviderBase>(8, StringComparer.OrdinalIgnoreCase);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
588 static readonly Dictionary<Type, DataProviderBase> _dataProviderTypeList = new Dictionary<Type, DataProviderBase>(4);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
589 static readonly object _dataProviderListLock = new object();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
590
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
591 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
592 /// Adds a new data provider.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
593 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
594 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
595 /// The method can be used to register a new data provider for further use.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
596 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
597 /// <include file="Examples1.xml" path='examples/db[@name="AddDataProvider(DataProvider.IDataProvider)"]/*' />
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
598 /// <seealso cref="AddConnectionString(string)"/>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
599 /// <seealso cref="BLToolkit.Data.DataProvider.DataProviderBase.Name"/>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
600 /// <param name="dataProvider">An instance of the <see cref="BLToolkit.Data.DataProvider.DataProviderBase"/> interface.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
601 public static void AddDataProvider(DataProviderBase dataProvider)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
602 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
603 if (null == dataProvider)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
604 throw new ArgumentNullException("dataProvider");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
605
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
606 if (string.IsNullOrEmpty(dataProvider.UniqueName))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
607 throw new ArgumentException(Resources.DbManager_InvalidDataProviderName, "dataProvider");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
608
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
609 if (string.IsNullOrEmpty(dataProvider.ProviderName))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
610 throw new ArgumentException(Resources.DbManager_InvalidDataProviderProviderName, "dataProvider");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
611
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
612 if (dataProvider.ConnectionType == null || !typeof(IDbConnection).IsAssignableFrom(dataProvider.ConnectionType))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
613 throw new ArgumentException(Resources.DbManager_InvalidDataProviderConnectionType, "dataProvider");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
614
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
615 lock (_dataProviderListLock)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
616 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
617 _dataProviderNameList[dataProvider.UniqueName.ToUpper()] = dataProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
618 _dataProviderNameList[dataProvider.ProviderName] = dataProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
619 _dataProviderTypeList[dataProvider.ConnectionType] = dataProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
620 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
621 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
622
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
623 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
624 /// Adds a new data provider witch a specified name.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
625 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
626 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
627 /// The method can be used to register a new data provider for further use.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
628 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
629 /// <include file="Examples1.xml" path='examples/db[@name="AddDataProvider(DataProvider.IDataProvider)"]/*' />
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
630 /// <seealso cref="AddConnectionString(string)"/>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
631 /// <seealso cref="BLToolkit.Data.DataProvider.DataProviderBase.Name"/>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
632 /// <param name="providerName">The data provider name.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
633 /// <param name="dataProvider">An instance of the <see cref="BLToolkit.Data.DataProvider.DataProviderBase"/> interface.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
634 public static void AddDataProvider(string providerName, DataProviderBase dataProvider)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
635 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
636 if (dataProvider == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
637 throw new ArgumentNullException("dataProvider");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
638
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
639 if (string.IsNullOrEmpty(providerName))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
640 throw new ArgumentException(Resources.DbManager_InvalidDataProviderName, "providerName");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
641
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
642 dataProvider.UniqueName = providerName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
643 AddDataProvider(dataProvider);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
644 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
645
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
646 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
647 /// Adds a new data provider.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
648 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
649 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
650 /// The method can be used to register a new data provider for further use.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
651 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
652 /// <seealso cref="AddConnectionString(string)"/>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
653 /// <seealso cref="BLToolkit.Data.DataProvider.DataProviderBase.Name"/>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
654 /// <param name="dataProviderType">A data provider type.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
655 public static void AddDataProvider(Type dataProviderType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
656 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
657 AddDataProvider((DataProviderBase)Activator.CreateInstance(dataProviderType));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
658 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
659
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
660 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
661 /// Adds a new data provider witch a specified name.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
662 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
663 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
664 /// The method can be used to register a new data provider for further use.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
665 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
666 /// <seealso cref="AddConnectionString(string)"/>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
667 /// <seealso cref="BLToolkit.Data.DataProvider.DataProviderBase.Name"/>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
668 /// <param name="providerName">The data provider name.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
669 /// <param name="dataProviderType">A data provider type.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
670 public static void AddDataProvider(string providerName, Type dataProviderType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
671 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
672 AddDataProvider(providerName, (DataProviderBase)Activator.CreateInstance(dataProviderType));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
673 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
674
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
675 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
676
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
677 #region AddConnectionString
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
678
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
679 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
680 /// Adds a new connection string or replaces existing one.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
681 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
682 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
683 /// Use this method when you use only one configuration and
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
684 /// you don't want to use a configuration file.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
685 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
686 /// <include file="Examples.xml" path='examples/db[@name="AddConnectionString(string)"]/*' />
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
687 /// <param name="connectionString">A valid database connection string.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
688 public static void AddConnectionString(string connectionString)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
689 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
690 AddConnectionString(string.Empty, connectionString);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
691 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
692
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
693 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
694 /// Adds a new connection string or replaces existing one.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
695 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
696 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
697 /// Use this method when you use multiple configurations and
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
698 /// you don't want to use a configuration file.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
699 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
700 /// <include file="Examples.xml" path='examples/db[@name="AddConnectionString(string,string)"]/*' />
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
701 /// <param name="configurationString">The configuration string.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
702 /// <param name="connectionString">A valid database connection string.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
703 public static void AddConnectionString(string configurationString, string connectionString)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
704 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
705 _connectionStringList[configurationString] = connectionString;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
706 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
707
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
708 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
709 /// Adds a new connection string or replaces existing one.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
710 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
711 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
712 /// Use this method when you use multiple configurations and
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
713 /// you don't want to use a configuration file.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
714 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
715 /// <include file="Examples.xml" path='examples/db[@name="AddConnectionString(string,string)"]/*' />
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
716 /// <param name="providerName">The data provider name.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
717 /// <param name="configurationString">The configuration string.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
718 /// <param name="connectionString">A valid database connection string.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
719 public static void AddConnectionString(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
720 string providerName, string configurationString, string connectionString)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
721 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
722 AddConnectionString(providerName + ProviderNameDivider + configurationString, connectionString);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
723 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
724
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
725 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
726
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
727 #region Public Static Properties
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
728
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
729 public const string ProviderNameDivider = ".";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
730 public const string AnyProvider = "*" + ProviderNameDivider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
731
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
732 private static readonly string _defaultDataProviderName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
733 private static string _defaultConfiguration;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
734
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
735 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
736 /// Gets and sets the default configuration string.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
737 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
738 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
739 /// See the <see cref="ConfigurationString"/> property
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
740 /// for an explanation and use of the default configuration.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
741 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
742 /// <value>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
743 /// A string containing default configuration settings.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
744 /// </value>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
745 /// <seealso cref="ConfigurationString"/>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
746 public static string DefaultConfiguration
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
747 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
748 get
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
749 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
750 if (_defaultConfiguration == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
751 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
752 // Grab first registered configuration.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
753 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
754 var defaultConfiguration = _connectionStringList.Select(de => de.Key).FirstOrDefault();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
755
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
756 if (defaultConfiguration == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
757 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
758 defaultConfiguration = string.Empty;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
759
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
760 foreach (ConnectionStringSettings css in ConfigurationManager.ConnectionStrings)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
761 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
762 if (css.ElementInformation.Source != null &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
763 !css.ElementInformation.Source.EndsWith("machine.config", StringComparison.OrdinalIgnoreCase))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
764 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
765 defaultConfiguration = css.Name;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
766 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
767 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
768 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
769 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
770
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
771 _defaultConfiguration = defaultConfiguration;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
772 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
773
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
774 return _defaultConfiguration;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
775 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
776
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
777 set { _defaultConfiguration = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
778 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
779
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
780 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
781 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
782 }