annotate Source/Data/DataProvider/DataProviderBase.cs @ 9:1e85f66cf767 default tip

update bltoolkit
author nickolay
date Thu, 05 Apr 2018 20:53:26 +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.Generic;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Data.Common;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using System.Data.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using System.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 namespace BLToolkit.Data.DataProvider
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 using Common;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 using Mapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 using Sql.SqlProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 /// The <b>DataProviderBase</b> is a class that provides specific data provider information
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 /// for the <see cref="DbManager"/> class.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 public abstract partial class DataProviderBase : IMappingSchemaProvider
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 #region Abstract Properties
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 /// Returns an actual type of the connection object used by this instance of the <see cref="DbManager"/>.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 /// <value>An instance of the <see cref="Type"/> class.</value>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 public abstract Type ConnectionType { get; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 /// Returns the data manager name.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 /// <value>The data manager name.</value>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 public abstract string Name { get; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 private string _uniqueName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 /// Same as <see cref="Name"/>, but may be overridden to add two or more providers of same type.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 public string UniqueName
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 get { return _uniqueName ?? Name; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 internal set { _uniqueName = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 #region Abstract Methods
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 /// Creates a new instance of the <see cref="IDbConnection"/>.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 /// <returns>The <see cref="IDbConnection"/> object.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 public abstract IDbConnection CreateConnectionObject();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 /// Creates a new connection object with same connection string.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 /// <param name="connection">A connection object used as prototype.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 /// <returns>New connection instance.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 public virtual IDbConnection CloneConnection(IDbConnection connection)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 if (connection == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 throw new ArgumentNullException("connection");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 var cloneable = connection as ICloneable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 if (cloneable != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 return (IDbConnection)cloneable.Clone();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 var newConnection = CreateConnectionObject();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 // This is definitelly not enought when PersistSecurityInfo set to false.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 newConnection.ConnectionString = connection.ConnectionString;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 return newConnection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 /// Creates an instance of the <see cref="DbDataAdapter"/>.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 /// <returns>The <see cref="DbDataAdapter"/> object.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 public abstract DbDataAdapter CreateDataAdapterObject();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 /// Populates the specified <see cref="IDbCommand"/> object's Parameters collection with
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 /// parameter information for the stored procedure specified in the <see cref="IDbCommand"/>.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 /// <param name="command">The <see cref="IDbCommand"/> referencing the stored procedure
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 /// for which the parameter information is to be derived.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 /// The derived parameters will be populated into the Parameters of this command.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 /// <returns>true - parameters can be derive.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 public abstract bool DeriveParameters(IDbCommand command);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 #region Factory methods
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 public virtual IDbCommand CreateCommandObject(IDbConnection connection)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 return connection.CreateCommand();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 public virtual IDbDataParameter CreateParameterObject(IDbCommand command)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 return command.CreateParameter();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 #region IDbDataParameter methods
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 public virtual IDbDataParameter GetParameter(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 IDbCommand command,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 NameOrIndexParameter nameOrIndex)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 return (IDbDataParameter)(nameOrIndex.ByName ?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 command.Parameters[nameOrIndex.Name] : command.Parameters[nameOrIndex.Index]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 public virtual void AttachParameter(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 IDbCommand command,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 IDbDataParameter parameter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 command.Parameters.Add(parameter);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 public virtual void SetUserDefinedType(IDbDataParameter parameter, string typeName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 throw new NotSupportedException(Name + " data provider does not support UDT.");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 public virtual bool IsValueParameter(IDbDataParameter parameter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 return parameter.Direction != ParameterDirection.ReturnValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 public virtual IDbDataParameter CloneParameter(IDbDataParameter parameter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 return (IDbDataParameter)((ICloneable)parameter).Clone();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 public virtual bool InitParameter(IDbDataParameter parameter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 #region Virtual Members
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 /// Open an <see cref="IDataReader"/> into the given RefCursor object
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 /// <param name="refCursor">The refcursor to open an <see cref="IDataReader"/> to</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 /// <returns>The <see cref="IDataReader"/> into the refcursor</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 public virtual IDataReader GetRefCursorDataReader(object refCursor)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 throw new NotSupportedException("Operation not supported on this DataProvider");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 public virtual object Convert(object value, ConvertType convertType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 return SqlProvider.Convert(value, convertType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 public virtual DataExceptionType ConvertErrorNumberToDataExceptionType(int number)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 return DataExceptionType.Undefined;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 public virtual void InitDbManager(DbManager dbManager)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 var schema = MappingSchema;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 if (schema != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 dbManager.MappingSchema = schema;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 /// One time initialization from a configuration file.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 /// <param name="attributes">Provider specific attributes.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 public virtual void Configure(System.Collections.Specialized.NameValueCollection attributes)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 public virtual MappingSchema MappingSchema { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 public virtual void PrepareCommand(ref CommandType commandType, ref string commandText, ref IDbDataParameter[] commandParameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 /*
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 if (commandParameters != null) foreach (var p in commandParameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 if (p.Value is System.Data.Linq.Binary)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 var arr = ((System.Data.Linq.Binary)p.Value).ToArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 p.Value = arr;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 p.DbType = DbType.Binary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 p.Size = arr.Length;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 */
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 public virtual bool CanReuseCommand(IDbCommand command, CommandType newCommandType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 return true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 public virtual int ExecuteArray(IDbCommand command, int iterations)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 // save parameter values
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 var parameters = command.Parameters
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 .OfType<IDbDataParameter>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 .Select(param => new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 Parameter = param,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 Value = param.Value as Array
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 .ToArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 var outParameters = parameters
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 .Where(p =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 p.Parameter.Direction == ParameterDirection.InputOutput ||
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 p.Parameter.Direction == ParameterDirection.Output)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251 .ToArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 // validate parameter values
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 foreach (var p in parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 if (p.Value == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258 throw new InvalidOperationException("ExecuteArray requires that all " +
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 "parameter values are arrays. Parameter name: " + p.Parameter.ParameterName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 if (p.Value.GetLength(0) != iterations)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 throw new InvalidOperationException("ExecuteArray requires that array sizes are " +
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265 "equal to the number of iterations. Parameter name: " + p.Parameter.ParameterName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 // run iterations
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 int rowsAffected = 0;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273 for (int iteration = 0; iteration < iterations; iteration++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275 // copy input parameter values
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276 foreach (var param in parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278 SetParameterValue(param.Parameter, param.Value.GetValue(iteration));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 rowsAffected += command.ExecuteNonQuery();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283 // return output parameter values
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284 foreach (var param in outParameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286 var outputValue = param.Parameter.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287 param.Value.SetValue(outputValue, iteration);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
289 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
290
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
291 return rowsAffected;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
292 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
293 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
294 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
295 // restore parameter values
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
296 foreach (var param in parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
297 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
298 param.Parameter.Value = param.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
299 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
300 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
301 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
302
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
303 public virtual string GetSequenceQuery(string sequenceName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
304 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
305 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
306 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
307
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
308 public virtual string NextSequenceQuery(string sequenceName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
309 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
310 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
311 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
312
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
313 public virtual string GetReturningInto(string columnName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
314 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
315 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
316 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
317
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
318 public virtual void SetParameterValue(IDbDataParameter parameter, object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
319 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
320 if (value is System.Data.Linq.Binary)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
321 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
322 var arr = ((System.Data.Linq.Binary)value).ToArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
323
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
324 parameter.Value = arr;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
325 parameter.DbType = DbType.Binary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
326 parameter.Size = arr.Length;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
327 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
328 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
329 parameter.Value = value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
330 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
331
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
332 public abstract ISqlProvider CreateSqlProvider();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
333
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
334 private ISqlProvider _sqlProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
335 protected ISqlProvider SqlProvider
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
336 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
337 get { return _sqlProvider ?? (_sqlProvider = CreateSqlProvider()); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
338 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
339
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
340 public virtual IDataReader GetDataReader(MappingSchema schema, IDataReader dataReader)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
341 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
342 return dataReader;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
343 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
344
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
345 public virtual IDataReader GetDataReader(IDbCommand command, CommandBehavior commandBehavior)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
346 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
347 return command.ExecuteReader(commandBehavior);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
348 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
349
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
350 public virtual bool ParameterNamesEqual(string paramName1, string paramName2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
351 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
352 // default implementation is case-insensitive, because if we make it
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
353 // case-sensitive and don't overload it in all existing providers - client code may break
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
354 return string.Equals(paramName1, paramName2, StringComparison.OrdinalIgnoreCase);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
355 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
356
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
357 public virtual DbType GetDbType(Type systemType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
358 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
359 if (systemType == typeof(Binary) || systemType == typeof(byte[]))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
360 return DbType.Binary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
361
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
362 return DbType.Object;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
363 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
364
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
365 public virtual bool IsMarsEnabled(IDbConnection conn)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
366 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
367 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
368 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
369
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
370 public virtual string ProviderName { get { return ConnectionType.Namespace; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
371 public virtual int MaxParameters { get { return 100; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
372 public virtual int MaxBatchSize { get { return 65536; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
373 public virtual string EndOfSql { get { return ";"; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
374
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
375 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
376
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
377 #region DataReaderEx
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
378
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
379 protected class DataReaderBase<T> : IDataReader
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
380 where T: IDataReader
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
381 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
382 public readonly T DataReader;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
383
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
384 protected DataReaderBase(T rd)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
385 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
386 DataReader = rd;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
387 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
388
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
389 #region Implementation of IDisposable
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
390
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
391 public void Dispose()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
392 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
393 DataReader.Dispose();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
394 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
395
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
396 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
397
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
398 #region Implementation of IDataRecord
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
399
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
400 public string GetName (int i) { return DataReader.GetName (i); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
401 public string GetDataTypeName(int i) { return DataReader.GetDataTypeName(i); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
402 public Type GetFieldType (int i) { return DataReader.GetFieldType (i); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
403 // GetValue method is virtual since it can be overridden by some data provider
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
404 // (For instance, OdbDataProvider uses special methodes for clob data fetching)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
405 public virtual object GetValue (int i) { return DataReader.GetValue (i); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
406 public int GetValues (object[] values) { return DataReader.GetValues (values); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
407 public int GetOrdinal (string name) { return DataReader.GetOrdinal (name); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
408 public bool GetBoolean (int i) { return DataReader.GetBoolean (i); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
409 public byte GetByte (int i) { return DataReader.GetByte (i); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
410 public char GetChar (int i) { return DataReader.GetChar (i); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
411 public Guid GetGuid (int i) { return DataReader.GetGuid (i); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
412 public short GetInt16 (int i) { return DataReader.GetInt16 (i); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
413 public int GetInt32 (int i) { return DataReader.GetInt32 (i); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
414 public long GetInt64 (int i) { return DataReader.GetInt64 (i); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
415 public float GetFloat (int i) { return DataReader.GetFloat (i); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
416 public double GetDouble (int i) { return DataReader.GetDouble (i); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
417 public string GetString (int i) { return DataReader.GetString (i); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
418 public decimal GetDecimal (int i) { return DataReader.GetDecimal (i); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
419 public DateTime GetDateTime (int i) { return DataReader.GetDateTime (i); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
420 public IDataReader GetData (int i) { return DataReader.GetData (i); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
421 public bool IsDBNull (int i) { return DataReader.IsDBNull (i); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
422
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
423 public int FieldCount { get { return DataReader.FieldCount; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
424
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
425 object IDataRecord.this[int i] { get { return DataReader[i]; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
426 object IDataRecord.this[string name] { get { return DataReader[name]; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
427
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
428 public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
429 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
430 return DataReader.GetBytes(i, fieldOffset, buffer, bufferoffset, length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
431 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
432
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
433 public long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
434 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
435 return DataReader.GetChars(i, fieldoffset, buffer, bufferoffset, length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
436 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
437
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
438 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
439
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
440 #region Implementation of IDataReader
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
441
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
442 public void Close () { DataReader.Close (); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
443 public DataTable GetSchemaTable() { return DataReader.GetSchemaTable(); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
444 public bool NextResult () { return DataReader.NextResult (); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
445 public bool Read () { return DataReader.Read (); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
446 public int Depth { get { return DataReader.Depth; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
447 public bool IsClosed { get { return DataReader.IsClosed; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
448 public int RecordsAffected { get { return DataReader.RecordsAffected; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
449
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
450 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
451 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
452
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
453 protected abstract class DataReaderEx<T> : DataReaderBase<T>, IDataReaderEx
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
454 where T: IDataReader
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
455 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
456 protected DataReaderEx(T rd) : base(rd)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
457 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
458 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
459
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
460 #region Implementation of IDataReaderEx
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
461
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
462 public abstract DateTimeOffset GetDateTimeOffset(int i);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
463
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
464 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
465 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
466
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
467 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
468
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
469 #region InsertBatch
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
470
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
471 public virtual int InsertBatchWithIdentity<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
472 DbManager db,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
473 string insertText,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
474 IEnumerable<T> collection,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
475 MemberMapper[] members,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
476 int maxBatchSize,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
477 DbManager.ParameterProvider<T> getParameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
478 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
479 throw new NotImplementedException("Insert batch with identity is not implemented!");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
480 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
481
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
482 public virtual int InsertBatch<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
483 DbManager db,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
484 string insertText,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
485 IEnumerable<T> collection,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
486 MemberMapper[] members,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
487 int maxBatchSize,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
488 DbManager.ParameterProvider<T> getParameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
489 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
490 db.SetCommand(insertText);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
491 return db.ExecuteForEach(collection, members, maxBatchSize, getParameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
492 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
493
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
494 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
495
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
496 protected int ExecuteSqlList(DbManager db, IEnumerable<string> sqlList)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
497 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
498 var cnt = 0;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
499
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
500 foreach (string sql in sqlList)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
501 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
502 cnt += db.SetCommand(sql).ExecuteNonQuery();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
503 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
504
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
505 return cnt;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
506 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
507
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
508 public virtual DbType GetParameterDbType(DbType dbType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
509 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
510 return dbType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
511 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
512 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
513 }