annotate Source/Data/DataProvider/OdpDataProvider.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 // Odp.Net Data Provider.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 // http://www.oracle.com/technology/tech/windows/odpnet/index.html
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using System.Collections;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using System.Collections.Generic;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using System.Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using System.Data.Common;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using System.Globalization;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 using System.IO;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 using System.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 using System.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 using System.Text;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 using System.Xml;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 using BLToolkit.Aspects;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 using BLToolkit.Common;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 using BLToolkit.Mapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 using BLToolkit.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 #if MANAGED
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 using Oracle.ManagedDataAccess.Client;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 using Oracle.ManagedDataAccess.Types;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 #else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 using Oracle.DataAccess.Client;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 using Oracle.DataAccess.Types;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 namespace BLToolkit.Data.DataProvider
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 using Sql.SqlProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 using BLToolkit.Data.Sql;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 /// Implements access to the Data Provider for Oracle.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 #if !MANAGED
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 public class OdpDataProvider : DataProviderBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 public OdpDataProvider()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 MappingSchema = new OdpMappingSchema();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 public const string NameString = DataProvider.ProviderName.Oracle;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 private const string DbTypeTableName = "Oracle.DataAccess.Client.OraDb_DbTypeTable";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 static OdpDataProvider()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 #else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 public class OdpManagedDataProvider : DataProviderBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 public OdpManagedDataProvider()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 MappingSchema = new OdpMappingSchema();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 public const string NameString = DataProvider.ProviderName.OracleManaged;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 private const string DbTypeTableName = "Oracle.ManagedDataAccess.Client.OraDb_DbTypeTable";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 static OdpManagedDataProvider()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 // Fix Oracle.Net bug #1: Array types are not handled.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 var oraDbDbTypeTableType = typeof(OracleParameter).Assembly.GetType(DbTypeTableName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 if (null != oraDbDbTypeTableType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 var typeTable = (Hashtable)oraDbDbTypeTableType.InvokeMember(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 "s_table", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.GetField,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 null, null, Type.EmptyTypes);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 if (null != typeTable)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 typeTable[typeof(DateTime[])] = OracleDbType.TimeStamp;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 typeTable[typeof(Int16[])] = OracleDbType.Int16;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 typeTable[typeof(Int32[])] = OracleDbType.Int32;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 typeTable[typeof(Int64[])] = OracleDbType.Int64;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 typeTable[typeof(Single[])] = OracleDbType.Single;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 typeTable[typeof(Double[])] = OracleDbType.Double;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 typeTable[typeof(Decimal[])] = OracleDbType.Decimal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 typeTable[typeof(TimeSpan[])] = OracleDbType.IntervalDS;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 typeTable[typeof(String[])] = OracleDbType.Varchar2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 typeTable[typeof(OracleBFile[])] = OracleDbType.BFile;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 typeTable[typeof(OracleBinary[])] = OracleDbType.Raw;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 typeTable[typeof(OracleBlob[])] = OracleDbType.Blob;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 typeTable[typeof(OracleClob[])] = OracleDbType.Clob;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 typeTable[typeof(OracleDate[])] = OracleDbType.Date;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 typeTable[typeof(OracleDecimal[])] = OracleDbType.Decimal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 typeTable[typeof(OracleIntervalDS[])] = OracleDbType.IntervalDS;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 typeTable[typeof(OracleIntervalYM[])] = OracleDbType.IntervalYM;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 typeTable[typeof(OracleRefCursor[])] = OracleDbType.RefCursor;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 typeTable[typeof(OracleString[])] = OracleDbType.Varchar2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 typeTable[typeof(OracleTimeStamp[])] = OracleDbType.TimeStamp;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 typeTable[typeof(OracleTimeStampLTZ[])]= OracleDbType.TimeStampLTZ;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 typeTable[typeof(OracleTimeStampTZ[])] = OracleDbType.TimeStampTZ;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 #if !MANAGED
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 typeTable[typeof(OracleXmlType[])] = OracleDbType.XmlType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 typeTable[typeof(Boolean)] = OracleDbType.Byte;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 typeTable[typeof(Guid)] = OracleDbType.Raw;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 typeTable[typeof(SByte)] = OracleDbType.Decimal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 typeTable[typeof(UInt16)] = OracleDbType.Decimal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 typeTable[typeof(UInt32)] = OracleDbType.Decimal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 typeTable[typeof(UInt64)] = OracleDbType.Decimal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 typeTable[typeof(Boolean[])] = OracleDbType.Byte;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 typeTable[typeof(Guid[])] = OracleDbType.Raw;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 typeTable[typeof(SByte[])] = OracleDbType.Decimal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 typeTable[typeof(UInt16[])] = OracleDbType.Decimal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 typeTable[typeof(UInt32[])] = OracleDbType.Decimal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 typeTable[typeof(UInt64[])] = OracleDbType.Decimal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 typeTable[typeof(Boolean?)] = OracleDbType.Byte;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 typeTable[typeof(Guid?)] = OracleDbType.Raw;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 typeTable[typeof(SByte?)] = OracleDbType.Decimal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 typeTable[typeof(UInt16?)] = OracleDbType.Decimal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 typeTable[typeof(UInt32?)] = OracleDbType.Decimal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 typeTable[typeof(UInt64?)] = OracleDbType.Decimal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 typeTable[typeof(DateTime?[])] = OracleDbType.TimeStamp;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 typeTable[typeof(Int16?[])] = OracleDbType.Int16;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 typeTable[typeof(Int32?[])] = OracleDbType.Int32;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 typeTable[typeof(Int64?[])] = OracleDbType.Int64;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 typeTable[typeof(Single?[])] = OracleDbType.Single;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 typeTable[typeof(Double?[])] = OracleDbType.Double;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 typeTable[typeof(Decimal?[])] = OracleDbType.Decimal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 typeTable[typeof(TimeSpan?[])] = OracleDbType.IntervalDS;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 typeTable[typeof(Boolean?[])] = OracleDbType.Byte;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 typeTable[typeof(Guid?[])] = OracleDbType.Raw;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 typeTable[typeof(SByte?[])] = OracleDbType.Decimal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 typeTable[typeof(UInt16?[])] = OracleDbType.Decimal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 typeTable[typeof(UInt32?[])] = OracleDbType.Decimal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 typeTable[typeof(UInt64?[])] = OracleDbType.Decimal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 typeTable[typeof(XmlReader)] = OracleDbType.XmlType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 typeTable[typeof(XmlDocument)] = OracleDbType.XmlType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 typeTable[typeof(MemoryStream)] = OracleDbType.Blob;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 typeTable[typeof(XmlReader[])] = OracleDbType.XmlType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 typeTable[typeof(XmlDocument[])] = OracleDbType.XmlType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 typeTable[typeof(MemoryStream[])] = OracleDbType.Blob;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 /// Creates the database connection object.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 /// <returns>The database connection object.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 public override IDbConnection CreateConnectionObject()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 return new OracleConnection();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 public override IDbCommand CreateCommandObject(IDbConnection connection)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 var oraConnection = connection as OracleConnection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 if (null != oraConnection)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 var oraCommand = oraConnection.CreateCommand();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 // Fix Oracle.Net bug #2: Empty arrays can not be sent to the server.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 oraCommand.BindByName = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 return oraCommand;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 return base.CreateCommandObject(connection);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 public override void SetParameterValue(IDbDataParameter parameter, object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 base.SetParameterValue(parameter, value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 // strings and byte arrays larger than 4000 bytes may be handled improperly
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 if (parameter is OracleParameterWrap)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 const int ThresholdSize = 4000;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 if (value is string && Encoding.UTF8.GetBytes((string)value).Length > ThresholdSize)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 ((OracleParameterWrap)parameter).OracleParameter.OracleDbType = OracleDbType.Clob;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 else if (value is byte[] && ((byte[])value).Length > ThresholdSize)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 ((OracleParameterWrap)parameter).OracleParameter.OracleDbType = OracleDbType.Blob;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 public override IDbDataParameter CloneParameter(IDbDataParameter parameter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 var oraParameter = (parameter is OracleParameterWrap)?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 (parameter as OracleParameterWrap).OracleParameter: parameter as OracleParameter;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 if (null != oraParameter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 var oraParameterClone = (OracleParameter)oraParameter.Clone();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 // Fix Oracle.Net bug #3: CollectionType property is not cloned.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 oraParameterClone.CollectionType = oraParameter.CollectionType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 // Fix Oracle.Net bug #8423178
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 // See http://forums.oracle.com/forums/thread.jspa?threadID=975902&tstart=0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 if (oraParameterClone.OracleDbType == OracleDbType.RefCursor)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 // Set OracleDbType to itself to reset m_bSetDbType and m_bOracleDbTypeExSet
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 oraParameterClone.OracleDbType = OracleDbType.RefCursor;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 return OracleParameterWrap.CreateInstance(oraParameterClone);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 return base.CloneParameter(parameter);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 public override void SetUserDefinedType(IDbDataParameter parameter, string typeName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 var oraParameter = (parameter is OracleParameterWrap) ?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 (parameter as OracleParameterWrap).OracleParameter : parameter as OracleParameter;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 if (oraParameter == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 throw new ArgumentException("OracleParameter expected.", "parameter");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 oraParameter.UdtTypeName = typeName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 /// Creates the data adapter object.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 /// <returns>A data adapter object.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251 public override DbDataAdapter CreateDataAdapterObject()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 return new OracleDataAdapter();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 /// Populates the specified IDbCommand object's Parameters collection with
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258 /// parameter information for the stored procedure specified in the IDbCommand.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 /// <param name="command">The IDbCommand referencing the stored procedure for which the parameter
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265 /// information is to be derived. The derived parameters will be populated into
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 /// the Parameters of this command.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 public override bool DeriveParameters(IDbCommand command)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 var oraCommand = command as OracleCommand;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 if (null != oraCommand)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275 OracleCommandBuilder.DeriveParameters(oraCommand);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277 catch (Exception ex)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 // Make Oracle less laconic.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 throw new DataException(string.Format("{0}\nCommandText: {1}", ex.Message, oraCommand.CommandText), ex);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284 return true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
289
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
290 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
291 /// Open an <see cref="IDataReader"/> into the given <see cref="OracleRefCursor"/> object
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
292 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
293 /// <param name="refCursor">an <see cref="OracleRefCursor"/> to perform GetDataReader() on</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
294 /// <returns>The <see cref="IDataReader"/> into the returned by GetDataReader()</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
295 public override IDataReader GetRefCursorDataReader(object refCursor)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
296 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
297 var oracleRefCursor = refCursor as OracleRefCursor;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
298
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
299 if (oracleRefCursor == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
300 throw new ArgumentException("Argument must be of type 'OracleRefCursor'", "refCursor");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
301
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
302 return oracleRefCursor.GetDataReader();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
303 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
304
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
305 public override object Convert(object value, ConvertType convertType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
306 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
307 switch (convertType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
308 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
309 case ConvertType.NameToCommandParameter:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
310 case ConvertType.NameToSprocParameter:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
311 return ParameterPrefix == null? value: ParameterPrefix + value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
312
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
313 case ConvertType.SprocParameterToName:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
314 var name = (string)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
315
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
316 if (name.Length > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
317 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
318 if (name[0] == ':')
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
319 return name.Substring(1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
320
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
321 if (ParameterPrefix != null &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
322 name.ToUpper(CultureInfo.InvariantCulture).StartsWith(ParameterPrefix))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
323 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
324 return name.Substring(ParameterPrefix.Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
325 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
326 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
327
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
328 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
329
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
330 case ConvertType.ExceptionToErrorNumber:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
331 if (value is OracleException)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
332 return ((OracleException)value).Number;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
333 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
334 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
335
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
336 return SqlProvider.Convert(value, convertType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
337 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
338
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
339 public override void PrepareCommand(ref CommandType commandType, ref string commandText, ref IDbDataParameter[] commandParameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
340 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
341 base.PrepareCommand(ref commandType, ref commandText, ref commandParameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
342
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
343 if (commandType == CommandType.Text)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
344 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
345 // Fix Oracle bug #11 '\r' is not a valid character!
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
346 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
347 commandText = commandText.Replace('\r', ' ');
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
348 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
349 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
350
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
351 public override void AttachParameter(IDbCommand command, IDbDataParameter parameter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
352 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
353 var oraParameter = (parameter is OracleParameterWrap)?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
354 (parameter as OracleParameterWrap).OracleParameter: parameter as OracleParameter;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
355
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
356 if (null != oraParameter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
357 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
358 if (oraParameter.CollectionType == OracleCollectionType.PLSQLAssociativeArray)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
359 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
360 if (oraParameter.Direction == ParameterDirection.Input
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
361 || oraParameter.Direction == ParameterDirection.InputOutput)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
362 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
363 var ar = oraParameter.Value as Array;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
364
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
365 if (null != ar && !(ar is byte[] || ar is char[]))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
366 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
367 oraParameter.Size = ar.Length;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
368
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
369 if (oraParameter.DbType == DbType.String
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
370 && oraParameter.Direction == ParameterDirection.InputOutput)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
371 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
372 var arrayBindSize = new int[oraParameter.Size];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
373
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
374 for (var i = 0; i < oraParameter.Size; ++i)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
375 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
376 arrayBindSize[i] = 1024;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
377 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
378
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
379 oraParameter.ArrayBindSize = arrayBindSize;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
380 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
381 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
382
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
383 if (oraParameter.Size == 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
384 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
385 // Skip this parameter.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
386 // Fix Oracle.Net bug #2: Empty arrays can not be sent to the server.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
387 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
388 return;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
389 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
390
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
391 if (oraParameter.Value is Stream[])
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
392 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
393 var streams = (Stream[]) oraParameter.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
394
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
395 for (var i = 0; i < oraParameter.Size; ++i)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
396 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
397 if (streams[i] is OracleBFile || streams[i] is OracleBlob || streams[i] is OracleClob
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
398 #if !MANAGED
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
399 || streams[i] is OracleXmlStream
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
400 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
401 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
402 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
403 // Known Oracle type.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
404 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
405 continue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
406 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
407
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
408 streams[i] = CopyStream(streams[i], (OracleCommand)command);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
409 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
410 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
411 else if (oraParameter.Value is XmlDocument[])
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
412 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
413 var xmlDocuments = (XmlDocument[]) oraParameter.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
414 var values = new object[oraParameter.Size];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
415
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
416 switch (oraParameter.OracleDbType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
417 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
418 case OracleDbType.XmlType:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
419 #if !MANAGED
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
420 for (var i = 0; i < oraParameter.Size; ++i)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
421 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
422 values[i] = xmlDocuments[i].DocumentElement == null?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
423 (object) DBNull.Value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
424 new OracleXmlType((OracleConnection)command.Connection, xmlDocuments[i]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
425 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
426
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
427 oraParameter.Value = values;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
428 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
429 #else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
430 throw new NotSupportedException();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
431 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
432 // Fix Oracle.Net bug #9: XmlDocument.ToString() returns System.Xml.XmlDocument,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
433 // so m_value.ToString() is not enought.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
434 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
435 case OracleDbType.Clob:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
436 case OracleDbType.NClob:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
437 case OracleDbType.Varchar2:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
438 case OracleDbType.NVarchar2:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
439 case OracleDbType.Char:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
440 case OracleDbType.NChar:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
441 for (var i = 0; i < oraParameter.Size; ++i)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
442 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
443 values[i] = xmlDocuments[i].DocumentElement == null?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
444 (object) DBNull.Value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
445 xmlDocuments[i].InnerXml;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
446 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
447
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
448 oraParameter.Value = values;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
449
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
450 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
451
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
452 // Or convert to bytes if need.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
453 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
454 case OracleDbType.Blob:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
455 case OracleDbType.BFile:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
456 case OracleDbType.Raw:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
457 case OracleDbType.Long:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
458 case OracleDbType.LongRaw:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
459 for (var i = 0; i < oraParameter.Size; ++i)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
460 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
461 if (xmlDocuments[i].DocumentElement == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
462 values[i] = DBNull.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
463 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
464 using (var s = new MemoryStream())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
465 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
466 xmlDocuments[i].Save(s);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
467 values[i] = s.GetBuffer();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
468 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
469 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
470
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
471 oraParameter.Value = values;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
472
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
473 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
474 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
475 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
476 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
477 else if (oraParameter.Direction == ParameterDirection.Output)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
478 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
479 // Fix Oracle.Net bug #4: ArrayBindSize must be explicitly specified.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
480 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
481 if (oraParameter.DbType == DbType.String)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
482 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
483 oraParameter.Size = 1024;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
484 var arrayBindSize = new int[oraParameter.Size];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
485 for (var i = 0; i < oraParameter.Size; ++i)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
486 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
487 arrayBindSize[i] = 1024;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
488 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
489
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
490 oraParameter.ArrayBindSize = arrayBindSize;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
491 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
492 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
493 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
494 oraParameter.Size = 32767;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
495 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
496 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
497 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
498 else if (oraParameter.Value is Stream)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
499 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
500 var stream = (Stream) oraParameter.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
501
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
502 if (!(stream is OracleBFile) && !(stream is OracleBlob) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
503 !(stream is OracleClob)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
504 #if !MANAGED
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
505 && !(stream is OracleXmlStream)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
506 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
507 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
508 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
509 oraParameter.Value = CopyStream(stream, (OracleCommand)command);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
510 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
511 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
512 else if (oraParameter.Value is Byte[])
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
513 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
514 var bytes = (Byte[]) oraParameter.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
515
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
516 if (bytes.Length > 32000)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
517 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
518 oraParameter.Value = CopyStream(bytes, (OracleCommand)command);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
519 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
520 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
521 else if (oraParameter.Value is XmlDocument)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
522 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
523 var xmlDocument = (XmlDocument)oraParameter.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
524 if (xmlDocument.DocumentElement == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
525 oraParameter.Value = DBNull.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
526 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
527 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
528
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
529 switch (oraParameter.OracleDbType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
530 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
531 case OracleDbType.XmlType:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
532 #if !MANAGED
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
533 oraParameter.Value = new OracleXmlType((OracleConnection)command.Connection, xmlDocument);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
534 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
535 #else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
536 throw new NotSupportedException();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
537 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
538
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
539 // Fix Oracle.Net bug #9: XmlDocument.ToString() returns System.Xml.XmlDocument,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
540 // so m_value.ToString() is not enought.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
541 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
542 case OracleDbType.Clob:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
543 case OracleDbType.NClob:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
544 case OracleDbType.Varchar2:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
545 case OracleDbType.NVarchar2:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
546 case OracleDbType.Char:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
547 case OracleDbType.NChar:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
548 using (TextWriter w = new StringWriter())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
549 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
550 xmlDocument.Save(w);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
551 oraParameter.Value = w.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
552 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
553 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
554
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
555 // Or convert to bytes if need.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
556 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
557 case OracleDbType.Blob:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
558 case OracleDbType.BFile:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
559 case OracleDbType.Raw:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
560 case OracleDbType.Long:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
561 case OracleDbType.LongRaw:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
562 using (var s = new MemoryStream())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
563 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
564 xmlDocument.Save(s);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
565 oraParameter.Value = s.GetBuffer();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
566 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
567 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
568 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
569 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
570 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
571
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
572 parameter = oraParameter;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
573 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
574
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
575 base.AttachParameter(command, parameter);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
576 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
577
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
578 private static Stream CopyStream(Stream stream, OracleCommand cmd)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
579 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
580 return CopyStream(Common.Convert.ToByteArray(stream), cmd);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
581 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
582
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
583 private static Stream CopyStream(Byte[] bytes, OracleCommand cmd)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
584 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
585 var ret = new OracleBlob(cmd.Connection);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
586 ret.Write(bytes, 0, bytes.Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
587 return ret;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
588 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
589
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
590 public override bool IsValueParameter(IDbDataParameter parameter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
591 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
592 var oraParameter = (parameter is OracleParameterWrap)?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
593 (parameter as OracleParameterWrap).OracleParameter: parameter as OracleParameter;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
594
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
595 if (null != oraParameter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
596 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
597 if (oraParameter.OracleDbType == OracleDbType.RefCursor
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
598 && oraParameter.Direction == ParameterDirection.Output)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
599 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
600 // Ignore out ref cursors, while out parameters of other types are o.k.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
601 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
602 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
603 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
604
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
605 return base.IsValueParameter(parameter);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
606 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
607
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
608 public override IDbDataParameter CreateParameterObject(IDbCommand command)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
609 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
610 var parameter = base.CreateParameterObject(command);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
611
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
612 if (parameter is OracleParameter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
613 parameter = OracleParameterWrap.CreateInstance(parameter as OracleParameter);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
614
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
615 return parameter;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
616 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
617
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
618 public override IDbDataParameter GetParameter(IDbCommand command, NameOrIndexParameter nameOrIndex)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
619 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
620 var parameter = base.GetParameter(command, nameOrIndex);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
621
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
622 if (parameter is OracleParameter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
623 parameter = OracleParameterWrap.CreateInstance(parameter as OracleParameter);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
624
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
625 return parameter;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
626 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
627
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
628 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
629 /// Returns connection type.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
630 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
631 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
632 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
633 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
634 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
635 /// <value>An instance of the <see cref="Type"/> class.</value>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
636 public override Type ConnectionType
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
637 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
638 get { return typeof(OracleConnection); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
639 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
640
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
641 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
642 /// Returns the data provider name.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
643 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
644 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
645 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
646 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
647 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataProvider Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
648 /// <value>Data provider name.</value>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
649 public override string Name
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
650 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
651 get { return NameString; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
652 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
653
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
654 public override int MaxBatchSize
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
655 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
656 get { return 0; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
657 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
658
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
659 public override int ExecuteArray(IDbCommand command, int iterations)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
660 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
661 var cmd = (OracleCommand)command;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
662 var oracleParameters = cmd.Parameters.OfType<OracleParameter>().ToArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
663 var oldCollectionTypes = oracleParameters.Select(p => p.CollectionType).ToArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
664
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
665 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
666 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
667 foreach (var p in oracleParameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
668 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
669 p.CollectionType = OracleCollectionType.None;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
670 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
671
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
672 cmd.ArrayBindCount = iterations;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
673 return cmd.ExecuteNonQuery();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
674 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
675 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
676 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
677 foreach (var p in oracleParameters.Zip(oldCollectionTypes, (p, t) => new { Param = p, CollectionType = t }))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
678 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
679 p.Param.CollectionType = p.CollectionType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
680 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
681
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
682 cmd.ArrayBindCount = 0;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
683 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
684 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
685
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
686 public override ISqlProvider CreateSqlProvider()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
687 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
688 return new OracleSqlProvider();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
689 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
690
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
691 public override IDataReader GetDataReader(MappingSchema schema, IDataReader dataReader)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
692 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
693 return dataReader is OracleDataReader ?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
694 new OracleDataReaderEx((OracleDataReader)dataReader) :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
695 base.GetDataReader(schema, dataReader);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
696 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
697
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
698 class OracleDataReaderEx: DataReaderEx<OracleDataReader>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
699 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
700 public OracleDataReaderEx(OracleDataReader rd)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
701 : base(rd)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
702 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
703 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
704
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
705 public override DateTimeOffset GetDateTimeOffset(int i)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
706 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
707 var ts = DataReader.GetOracleTimeStampTZ(i);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
708 return new DateTimeOffset(ts.Value, ts.GetTimeZoneOffset());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
709 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
710 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
711
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
712 private string _parameterPrefix = "P";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
713 public string ParameterPrefix
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
714 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
715 get { return _parameterPrefix; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
716 set
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
717 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
718 _parameterPrefix = string.IsNullOrEmpty(value)? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
719 value.ToUpper(CultureInfo.InvariantCulture);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
720 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
721 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
722
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
723 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
724 /// One time initialization from a configuration file.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
725 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
726 /// <param name="attributes">Provider specific attributes.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
727 public override void Configure(System.Collections.Specialized.NameValueCollection attributes)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
728 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
729 var val = attributes["ParameterPrefix"];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
730 if (val != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
731 ParameterPrefix = val;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
732
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
733 base.Configure(attributes);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
734 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
735
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
736 #region Inner types
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
737
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
738 public class OdpMappingSchema : MappingSchema
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
739 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
740 public override DataReaderMapper CreateDataReaderMapper(IDataReader dataReader)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
741 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
742 return new OracleDataReaderMapper(this, dataReader);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
743 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
744
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
745 public override DataReaderMapper CreateDataReaderMapper(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
746 IDataReader dataReader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
747 NameOrIndexParameter nip)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
748 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
749 return new OracleScalarDataReaderMapper(this, dataReader, nip);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
750 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
751
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
752 public override Reflection.Extension.ExtensionList Extensions
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
753 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
754 get { return Map.DefaultSchema.Extensions; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
755 set { Map.DefaultSchema.Extensions = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
756 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
757
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
758 #region Convert
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
759
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
760 #region Primitive Types
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
761
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
762 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
763 public override SByte ConvertToSByte(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
764 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
765 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
766 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
767 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
768 return oraDecimal.IsNull? DefaultSByteNullValue: (SByte)oraDecimal.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
769 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
770
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
771 return base.ConvertToSByte(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
772 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
773
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
774 public override Int16 ConvertToInt16(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
775 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
776 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
777 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
778 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
779 return oraDecimal.IsNull? DefaultInt16NullValue: oraDecimal.ToInt16();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
780 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
781
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
782 return base.ConvertToInt16(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
783 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
784
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
785 public override Int32 ConvertToInt32(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
786 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
787 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
788 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
789 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
790 return oraDecimal.IsNull? DefaultInt32NullValue: oraDecimal.ToInt32();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
791 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
792
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
793 return base.ConvertToInt32(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
794 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
795
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
796 public override Int64 ConvertToInt64(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
797 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
798 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
799 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
800 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
801 return oraDecimal.IsNull? DefaultInt64NullValue: oraDecimal.ToInt64();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
802 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
803
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
804 return base.ConvertToInt64(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
805 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
806
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
807 public override Byte ConvertToByte(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
808 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
809 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
810 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
811 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
812 return oraDecimal.IsNull? DefaultByteNullValue: oraDecimal.ToByte();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
813 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
814
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
815 return base.ConvertToByte(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
816 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
817
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
818 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
819 public override UInt16 ConvertToUInt16(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
820 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
821 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
822 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
823 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
824 return oraDecimal.IsNull? DefaultUInt16NullValue: (UInt16)oraDecimal.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
825 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
826
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
827 return base.ConvertToUInt16(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
828 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
829
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
830 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
831 public override UInt32 ConvertToUInt32(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
832 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
833 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
834 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
835 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
836 return oraDecimal.IsNull? DefaultUInt32NullValue: (UInt32)oraDecimal.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
837 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
838
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
839 return base.ConvertToUInt32(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
840 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
841
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
842 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
843 public override UInt64 ConvertToUInt64(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
844 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
845 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
846 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
847 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
848 return oraDecimal.IsNull? DefaultUInt64NullValue: (UInt64)oraDecimal.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
849 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
850
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
851 return base.ConvertToUInt64(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
852 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
853
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
854 public override Single ConvertToSingle(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
855 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
856 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
857 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
858 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
859 return oraDecimal.IsNull? DefaultSingleNullValue: oraDecimal.ToSingle();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
860 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
861
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
862 return base.ConvertToSingle(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
863 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
864
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
865 public override Double ConvertToDouble(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
866 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
867 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
868 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
869 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
870 return oraDecimal.IsNull? DefaultDoubleNullValue: oraDecimal.ToDouble();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
871 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
872
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
873 return base.ConvertToDouble(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
874 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
875
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
876 public override Boolean ConvertToBoolean(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
877 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
878 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
879 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
880 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
881 return oraDecimal.IsNull? DefaultBooleanNullValue: (oraDecimal.Value != 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
882 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
883
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
884 return base.ConvertToBoolean(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
885 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
886
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
887 public override DateTime ConvertToDateTime(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
888 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
889 if (value is OracleDate)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
890 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
891 var oraDate = (OracleDate)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
892 return oraDate.IsNull? DefaultDateTimeNullValue: oraDate.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
893 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
894
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
895 return base.ConvertToDateTime(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
896 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
897
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
898 public override Decimal ConvertToDecimal(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
899 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
900 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
901 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
902 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
903 return oraDecimal.IsNull? DefaultDecimalNullValue: oraDecimal.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
904 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
905
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
906 return base.ConvertToDecimal(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
907 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
908
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
909 public override Guid ConvertToGuid(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
910 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
911 if (value is OracleString)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
912 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
913 var oraString = (OracleString)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
914 return oraString.IsNull? DefaultGuidNullValue: new Guid(oraString.Value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
915 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
916
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
917 if (value is OracleBlob)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
918 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
919 using (var oraBlob = (OracleBlob)value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
920 return oraBlob.IsNull? DefaultGuidNullValue: new Guid(oraBlob.Value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
921 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
922
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
923 return base.ConvertToGuid(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
924 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
925
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
926 public override String ConvertToString(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
927 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
928 if (value is OracleString)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
929 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
930 var oraString = (OracleString)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
931 return oraString.IsNull? DefaultStringNullValue: oraString.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
932 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
933 #if !MANAGED
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
934 if (value is OracleXmlType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
935 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
936 var oraXmlType = (OracleXmlType)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
937 return oraXmlType.IsNull ? DefaultStringNullValue : oraXmlType.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
938 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
939 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
940 if (value is OracleClob)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
941 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
942 using (var oraClob = (OracleClob)value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
943 return oraClob.IsNull? DefaultStringNullValue: oraClob.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
944 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
945
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
946 return base.ConvertToString(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
947 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
948
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
949 #if !MANAGED
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
950 public override Stream ConvertToStream(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
951 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
952 if (value is OracleXmlType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
953 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
954 var oraXml = (OracleXmlType)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
955 return oraXml.IsNull? DefaultStreamNullValue: oraXml.GetStream();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
956 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
957
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
958 return base.ConvertToStream(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
959 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
960
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
961 public override XmlReader ConvertToXmlReader(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
962 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
963 if (value is OracleXmlType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
964 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
965 var oraXml = (OracleXmlType)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
966 return oraXml.IsNull? DefaultXmlReaderNullValue: oraXml.GetXmlReader();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
967 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
968
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
969 return base.ConvertToXmlReader(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
970 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
971
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
972 public override XmlDocument ConvertToXmlDocument(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
973 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
974 if (value is OracleXmlType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
975 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
976 var oraXml = (OracleXmlType)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
977 return oraXml.IsNull? DefaultXmlDocumentNullValue: oraXml.GetXmlDocument();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
978 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
979
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
980 return base.ConvertToXmlDocument(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
981 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
982 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
983
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
984 public override Byte[] ConvertToByteArray(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
985 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
986 if (value is OracleBlob)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
987 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
988 using (var oraBlob = (OracleBlob)value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
989 return oraBlob.IsNull? null: oraBlob.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
990 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
991
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
992 if (value is OracleBinary)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
993 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
994 var oraBinary = (OracleBinary)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
995 return oraBinary.IsNull? null: oraBinary.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
996 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
997
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
998 if (value is OracleBFile)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
999 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1000 var oraBFile = (OracleBFile)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1001 return oraBFile.IsNull? null: oraBFile.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1002 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1003
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1004 return base.ConvertToByteArray(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1005 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1006
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1007 public override Char[] ConvertToCharArray(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1008 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1009 if (value is OracleString)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1010 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1011 var oraString = (OracleString)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1012 return oraString.IsNull? null: oraString.Value.ToCharArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1013 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1014
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1015 if (value is OracleClob)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1016 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1017 using (var oraClob = (OracleClob)value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1018 return oraClob.IsNull? null: oraClob.Value.ToCharArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1019 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1020
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1021 return base.ConvertToCharArray(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1022 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1023
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1024 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1025
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1026 #region Nullable Types
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1027
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1028 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1029 public override SByte? ConvertToNullableSByte(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1030 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1031 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1032 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1033 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1034 return oraDecimal.IsNull? null: (SByte?)oraDecimal.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1035 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1036
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1037 return base.ConvertToNullableSByte(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1038 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1039
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1040 public override Int16? ConvertToNullableInt16(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1041 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1042 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1043 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1044 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1045 return oraDecimal.IsNull? null: (Int16?)oraDecimal.ToInt16();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1046 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1047
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1048 return base.ConvertToNullableInt16(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1049 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1050
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1051 public override Int32? ConvertToNullableInt32(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1052 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1053 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1054 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1055 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1056 return oraDecimal.IsNull? null: (Int32?)oraDecimal.ToInt32();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1057 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1058
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1059 return base.ConvertToNullableInt32(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1060 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1061
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1062 public override Int64? ConvertToNullableInt64(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1063 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1064 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1065 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1066 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1067 return oraDecimal.IsNull? null: (Int64?)oraDecimal.ToInt64();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1068 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1069
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1070 return base.ConvertToNullableInt64(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1071 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1072
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1073 public override Byte? ConvertToNullableByte(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1074 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1075 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1076 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1077 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1078 return oraDecimal.IsNull? null: (Byte?)oraDecimal.ToByte();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1079 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1080
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1081 return base.ConvertToNullableByte(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1082 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1083
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1084 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1085 public override UInt16? ConvertToNullableUInt16(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1086 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1087 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1088 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1089 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1090 return oraDecimal.IsNull? null: (UInt16?)oraDecimal.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1091 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1092
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1093 return base.ConvertToNullableUInt16(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1094 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1095
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1096 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1097 public override UInt32? ConvertToNullableUInt32(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1098 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1099 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1100 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1101 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1102 return oraDecimal.IsNull? null: (UInt32?)oraDecimal.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1103 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1104
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1105 return base.ConvertToNullableUInt32(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1106 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1107
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1108 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1109 public override UInt64? ConvertToNullableUInt64(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1110 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1111 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1112 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1113 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1114 return oraDecimal.IsNull? null: (UInt64?)oraDecimal.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1115 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1116
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1117 return base.ConvertToNullableUInt64(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1118 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1119
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1120 public override Single? ConvertToNullableSingle(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1121 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1122 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1123 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1124 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1125 return oraDecimal.IsNull? null: (Single?)oraDecimal.ToSingle();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1126 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1127
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1128 return base.ConvertToNullableSingle(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1129 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1130
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1131 public override Double? ConvertToNullableDouble(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1132 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1133 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1134 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1135 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1136 return oraDecimal.IsNull? null: (Double?)oraDecimal.ToDouble();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1137 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1138
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1139 return base.ConvertToNullableDouble(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1140 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1141
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1142 public override Boolean? ConvertToNullableBoolean(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1143 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1144 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1145 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1146 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1147 return oraDecimal.IsNull? null: (Boolean?)(oraDecimal.Value != 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1148 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1149
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1150 return base.ConvertToNullableBoolean(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1151 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1152
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1153 public override DateTime? ConvertToNullableDateTime(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1154 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1155 if (value is OracleDate)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1156 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1157 var oraDate = (OracleDate)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1158 return oraDate.IsNull? null: (DateTime?)oraDate.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1159 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1160
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1161 return base.ConvertToNullableDateTime(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1162 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1163
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1164 public override Decimal? ConvertToNullableDecimal(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1165 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1166 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1167 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1168 var oraDecimal = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1169 return oraDecimal.IsNull? null: (Decimal?)oraDecimal.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1170 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1171
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1172 return base.ConvertToNullableDecimal(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1173 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1174
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1175 public override Guid? ConvertToNullableGuid(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1176 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1177 if (value is OracleString)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1178 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1179 var oraString = (OracleString)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1180 return oraString.IsNull? null: (Guid?)new Guid(oraString.Value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1181 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1182
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1183 if (value is OracleBlob)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1184 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1185 using (var oraBlob = (OracleBlob)value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1186 return oraBlob.IsNull? null: (Guid?)new Guid(oraBlob.Value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1187 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1188
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1189 return base.ConvertToNullableGuid(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1190 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1191
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1192 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1193
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1194 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1195
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1196 public override object MapValueToEnum(object value, Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1197 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1198 if (value is OracleString)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1199 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1200 var oracleValue = (OracleString)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1201 value = oracleValue.IsNull? null: oracleValue.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1202 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1203 else if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1204 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1205 var oracleValue = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1206 if (oracleValue.IsNull)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1207 value = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1208 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1209 value = oracleValue.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1210 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1211
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1212 return base.MapValueToEnum(value, type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1213 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1214
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1215 public override object MapValueToEnum(object value, MemberAccessor ma)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1216 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1217 if (value is OracleString)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1218 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1219 var oracleValue = (OracleString)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1220 value = oracleValue.IsNull ? null : oracleValue.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1221 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1222 else if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1223 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1224 var oracleValue = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1225 if (oracleValue.IsNull)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1226 value = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1227 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1228 value = oracleValue.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1229 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1230
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1231 return base.MapValueToEnum(value, ma);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1232 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1233
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1234 public override object ConvertChangeType(object value, Type conversionType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1235 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1236 // Handle OracleDecimal with IsNull == true case
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1237 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1238 return base.ConvertChangeType(IsNull(value)? null: value, conversionType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1239 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1240
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1241 public override bool IsNull(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1242 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1243 // ODP 10 does not expose this interface to public.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1244 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1245 // return value is INullable && ((INullable)value).IsNull;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1246
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1247 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1248 value is OracleDecimal? ((OracleDecimal) value).IsNull:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1249 value is OracleString? ((OracleString) value).IsNull:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1250 value is OracleDate? ((OracleDate) value).IsNull:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1251 value is OracleTimeStamp? ((OracleTimeStamp) value).IsNull:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1252 value is OracleTimeStampTZ? ((OracleTimeStampTZ) value).IsNull:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1253 value is OracleTimeStampLTZ? ((OracleTimeStampLTZ)value).IsNull:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1254 #if !MANAGED
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1255 value is OracleXmlType? ((OracleXmlType) value).IsNull:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1256 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1257 value is OracleBlob? ((OracleBlob) value).IsNull:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1258 value is OracleClob? ((OracleClob) value).IsNull:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1259 value is OracleBFile? ((OracleBFile) value).IsNull:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1260 value is OracleBinary? ((OracleBinary) value).IsNull:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1261 value is OracleIntervalDS? ((OracleIntervalDS) value).IsNull:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1262 value is OracleIntervalYM? ((OracleIntervalYM) value).IsNull:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1263 base.IsNull(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1264 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1265 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1266
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1267 // TODO: implement via IDataReaderEx / DataReaderEx
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1268 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1269 public class OracleDataReaderMapper : DataReaderMapper
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1270 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1271 public OracleDataReaderMapper(MappingSchema mappingSchema, IDataReader dataReader)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1272 : base(mappingSchema, dataReader)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1273 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1274 _dataReader = dataReader is OracleDataReaderEx?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1275 ((OracleDataReaderEx)dataReader).DataReader:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1276 (OracleDataReader)dataReader;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1277 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1278
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1279 private readonly OracleDataReader _dataReader;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1280
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1281 public override Type GetFieldType(int index)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1282 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1283 var fieldType = _dataReader.GetProviderSpecificFieldType(index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1284
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1285 if (fieldType != typeof(OracleBlob)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1286 #if !MANAGED
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1287 && fieldType != typeof(OracleXmlType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1288 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1289 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1290 fieldType = _dataReader.GetFieldType(index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1291
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1292 return fieldType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1293 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1294
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1295 public override object GetValue(object o, int index)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1296 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1297 var fieldType = _dataReader.GetProviderSpecificFieldType(index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1298
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1299 #if !MANAGED
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1300 if (fieldType == typeof(OracleXmlType))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1301 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1302 var xml = _dataReader.GetOracleXmlType(index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1303 return MappingSchema.ConvertToXmlDocument(xml);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1304 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1305 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1306 if (fieldType == typeof(OracleBlob))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1307 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1308 var blob = _dataReader.GetOracleBlob(index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1309 return MappingSchema.ConvertToStream(blob);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1310 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1311
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1312 return _dataReader.IsDBNull(index)? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1313 _dataReader.GetValue(index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1314 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1315
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1316 public override Boolean GetBoolean(object o, int index) { return MappingSchema.ConvertToBoolean(GetValue(o, index)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1317 public override Char GetChar (object o, int index) { return MappingSchema.ConvertToChar (GetValue(o, index)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1318 public override Guid GetGuid (object o, int index) { return MappingSchema.ConvertToGuid (GetValue(o, index)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1319
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1320 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1321 public override SByte GetSByte (object o, int index) { return (SByte)_dataReader.GetDecimal(index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1322 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1323 public override UInt16 GetUInt16 (object o, int index) { return (UInt16)_dataReader.GetDecimal(index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1324 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1325 public override UInt32 GetUInt32 (object o, int index) { return (UInt32)_dataReader.GetDecimal(index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1326 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1327 public override UInt64 GetUInt64 (object o, int index) { return (UInt64)_dataReader.GetDecimal(index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1328
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1329 public override Decimal GetDecimal(object o, int index) { return OracleDecimal.SetPrecision(_dataReader.GetOracleDecimal(index), 28).Value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1330
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1331 public override Boolean? GetNullableBoolean(object o, int index) { return MappingSchema.ConvertToNullableBoolean(GetValue(o, index)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1332 public override Char? GetNullableChar (object o, int index) { return MappingSchema.ConvertToNullableChar (GetValue(o, index)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1333 public override Guid? GetNullableGuid (object o, int index) { return MappingSchema.ConvertToNullableGuid (GetValue(o, index)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1334
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1335 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1336 public override SByte? GetNullableSByte (object o, int index) { return _dataReader.IsDBNull(index)? null: (SByte?)_dataReader.GetDecimal(index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1337 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1338 public override UInt16? GetNullableUInt16 (object o, int index) { return _dataReader.IsDBNull(index)? null: (UInt16?)_dataReader.GetDecimal(index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1339 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1340 public override UInt32? GetNullableUInt32 (object o, int index) { return _dataReader.IsDBNull(index)? null: (UInt32?)_dataReader.GetDecimal(index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1341 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1342 public override UInt64? GetNullableUInt64 (object o, int index) { return _dataReader.IsDBNull(index)? null: (UInt64?)_dataReader.GetDecimal(index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1343
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1344 public override Decimal? GetNullableDecimal(object o, int index) { return _dataReader.IsDBNull(index)? (decimal?)null: OracleDecimal.SetPrecision(_dataReader.GetOracleDecimal(index), 28).Value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1345 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1346
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1347 public class OracleScalarDataReaderMapper : ScalarDataReaderMapper
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1348 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1349 private readonly OracleDataReader _dataReader;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1350
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1351 public OracleScalarDataReaderMapper(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1352 MappingSchema mappingSchema,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1353 IDataReader dataReader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1354 NameOrIndexParameter nameOrIndex)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1355 : base(mappingSchema, dataReader, nameOrIndex)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1356 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1357 _dataReader = dataReader is OracleDataReaderEx?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1358 ((OracleDataReaderEx)dataReader).DataReader:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1359 (OracleDataReader)dataReader;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1360
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1361 _fieldType = _dataReader.GetProviderSpecificFieldType(Index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1362
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1363 if (_fieldType != typeof(OracleBlob)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1364 #if !MANAGED
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1365 && _fieldType != typeof(OracleXmlType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1366 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1367 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1368 _fieldType = _dataReader.GetFieldType(Index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1369 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1370
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1371 private readonly Type _fieldType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1372
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1373 public override Type GetFieldType(int index)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1374 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1375 return _fieldType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1376 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1377
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1378 public override object GetValue(object o, int index)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1379 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1380 #if !MANAGED
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1381 if (_fieldType == typeof(OracleXmlType))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1382 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1383 var xml = _dataReader.GetOracleXmlType(Index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1384 return MappingSchema.ConvertToXmlDocument(xml);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1385 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1386 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1387 if (_fieldType == typeof(OracleBlob))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1388 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1389 var blob = _dataReader.GetOracleBlob(Index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1390 return MappingSchema.ConvertToStream(blob);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1391 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1392
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1393 return _dataReader.IsDBNull(index)? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1394 _dataReader.GetValue(Index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1395 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1396
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1397 public override Boolean GetBoolean(object o, int index) { return MappingSchema.ConvertToBoolean(GetValue(o, Index)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1398 public override Char GetChar (object o, int index) { return MappingSchema.ConvertToChar (GetValue(o, Index)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1399 public override Guid GetGuid (object o, int index) { return MappingSchema.ConvertToGuid (GetValue(o, Index)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1400
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1401 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1402 public override SByte GetSByte (object o, int index) { return (SByte)_dataReader.GetDecimal(Index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1403 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1404 public override UInt16 GetUInt16 (object o, int index) { return (UInt16)_dataReader.GetDecimal(Index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1405 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1406 public override UInt32 GetUInt32 (object o, int index) { return (UInt32)_dataReader.GetDecimal(Index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1407 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1408 public override UInt64 GetUInt64 (object o, int index) { return (UInt64)_dataReader.GetDecimal(Index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1409
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1410 public override Decimal GetDecimal(object o, int index) { return OracleDecimal.SetPrecision(_dataReader.GetOracleDecimal(Index), 28).Value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1411
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1412 public override Boolean? GetNullableBoolean(object o, int index) { return MappingSchema.ConvertToNullableBoolean(GetValue(o, Index)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1413 public override Char? GetNullableChar (object o, int index) { return MappingSchema.ConvertToNullableChar (GetValue(o, Index)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1414 public override Guid? GetNullableGuid (object o, int index) { return MappingSchema.ConvertToNullableGuid (GetValue(o, Index)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1415
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1416 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1417 public override SByte? GetNullableSByte (object o, int index) { return _dataReader.IsDBNull(index)? null: (SByte?)_dataReader.GetDecimal(Index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1418 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1419 public override UInt16? GetNullableUInt16 (object o, int index) { return _dataReader.IsDBNull(index)? null: (UInt16?)_dataReader.GetDecimal(Index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1420 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1421 public override UInt32? GetNullableUInt32 (object o, int index) { return _dataReader.IsDBNull(index)? null: (UInt32?)_dataReader.GetDecimal(Index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1422 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1423 public override UInt64? GetNullableUInt64 (object o, int index) { return _dataReader.IsDBNull(index)? null: (UInt64?)_dataReader.GetDecimal(Index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1424
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1425 public override Decimal? GetNullableDecimal(object o, int index) { return _dataReader.IsDBNull(index)? (decimal?)null: OracleDecimal.SetPrecision(_dataReader.GetOracleDecimal(Index), 28).Value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1426 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1427
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1428 [Mixin(typeof(IDbDataParameter), "_oracleParameter")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1429 [Mixin(typeof(IDataParameter), "_oracleParameter")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1430 [Mixin(typeof(IDisposable), "_oracleParameter")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1431 [Mixin(typeof(ICloneable), "_oracleParameter")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1432 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1433 public abstract class OracleParameterWrap
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1434 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1435 protected OracleParameter _oracleParameter;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1436 public OracleParameter OracleParameter
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1437 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1438 get { return _oracleParameter; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1439 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1440
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1441 public static IDbDataParameter CreateInstance(OracleParameter oraParameter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1442 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1443 var wrap = TypeAccessor<OracleParameterWrap>.CreateInstanceEx();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1444
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1445 wrap._oracleParameter = oraParameter;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1446
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1447 return (IDbDataParameter)wrap;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1448 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1449
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1450 public override string ToString()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1451 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1452 return _oracleParameter.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1453 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1454
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1455 ///<summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1456 ///Gets or sets the value of the parameter.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1457 ///</summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1458 ///<returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1459 ///An <see cref="T:System.Object"/> that is the value of the parameter.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1460 ///The default value is null.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1461 ///</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1462 protected object Value
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1463 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1464 #if CONVERTORACLETYPES
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1465 [MixinOverride]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1466 get
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1467 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1468 object value = _oracleParameter.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1469 if (value is OracleBinary)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1470 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1471 OracleBinary oracleValue = (OracleBinary)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1472 return oracleValue.IsNull? null: oracleValue.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1473 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1474 if (value is OracleDate)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1475 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1476 OracleDate oracleValue = (OracleDate)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1477 if (oracleValue.IsNull)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1478 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1479 return oracleValue.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1480 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1481 if (value is OracleDecimal)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1482 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1483 OracleDecimal oracleValue = (OracleDecimal)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1484 if (oracleValue.IsNull)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1485 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1486 return oracleValue.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1487 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1488 if (value is OracleIntervalDS)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1489 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1490 OracleIntervalDS oracleValue = (OracleIntervalDS)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1491 if (oracleValue.IsNull)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1492 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1493 return oracleValue.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1494 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1495 if (value is OracleIntervalYM)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1496 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1497 OracleIntervalYM oracleValue = (OracleIntervalYM)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1498 if (oracleValue.IsNull)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1499 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1500 return oracleValue.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1501 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1502 if (value is OracleString)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1503 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1504 OracleString oracleValue = (OracleString)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1505 return oracleValue.IsNull? null: oracleValue.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1506 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1507 if (value is OracleTimeStamp)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1508 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1509 OracleTimeStamp oracleValue = (OracleTimeStamp)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1510 if (oracleValue.IsNull)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1511 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1512 return oracleValue.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1513 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1514 if (value is OracleTimeStampLTZ)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1515 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1516 OracleTimeStampLTZ oracleValue = (OracleTimeStampLTZ)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1517 if (oracleValue.IsNull)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1518 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1519 return oracleValue.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1520 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1521 if (value is OracleTimeStampTZ)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1522 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1523 OracleTimeStampTZ oracleValue = (OracleTimeStampTZ)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1524 if (oracleValue.IsNull)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1525 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1526 return oracleValue.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1527 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1528 if (value is OracleXmlType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1529 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1530 OracleXmlType oracleValue = (OracleXmlType)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1531 return oracleValue.IsNull? null: oracleValue.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1532 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1533
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1534 return value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1535 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1536 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1537 [MixinOverride]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1538 set
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1539 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1540 if (null != value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1541 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1542 if (value is Guid)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1543 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1544 // Fix Oracle.Net bug #6: guid type is not handled
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1545 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1546 value = ((Guid)value).ToByteArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1547 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1548 else if (value is Array && !(value is byte[] || value is char[]))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1549 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1550 _oracleParameter.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1551 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1552 else if (value is IConvertible)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1553 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1554 var convertible = (IConvertible)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1555 var typeCode = convertible.GetTypeCode();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1556
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1557 switch (typeCode)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1558 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1559 case TypeCode.Boolean:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1560 // Fix Oracle.Net bug #7: bool type is handled wrong
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1561 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1562 value = convertible.ToByte(null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1563 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1564
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1565 case TypeCode.SByte:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1566 case TypeCode.UInt16:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1567 case TypeCode.UInt32:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1568 case TypeCode.UInt64:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1569 // Fix Oracle.Net bug #8: some integer types are handled wrong
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1570 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1571 value = convertible.ToDecimal(null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1572 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1573
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1574 // Fix Oracle.Net bug #10: zero-length string can not be converted to
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1575 // ORAXML type, but null value can be.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1576 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1577 case TypeCode.String:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1578 if (((string)value).Length == 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1579 value = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1580 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1581
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1582 default:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1583 // Fix Oracle.Net bug #5: Enum type is not handled
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1584 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1585 if (value is Enum)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1586 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1587 // Convert a Enum value to it's underlying type.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1588 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1589 value = System.Convert.ChangeType(value, typeCode);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1590 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1591 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1592 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1593 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1594 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1595
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1596 _oracleParameter.Value = value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1597 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1598 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1599 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1600
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1601 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1602
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1603 #region InsertBatch
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1604
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1605 public override int InsertBatch<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1606 DbManager db,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1607 string insertText,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1608 IEnumerable<T> collection,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1609 MemberMapper[] members,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1610 int maxBatchSize,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1611 DbManager.ParameterProvider<T> getParameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1612 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1613 var sb = new StringBuilder();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1614 var sp = new OracleSqlProvider();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1615 var pn = 0;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1616 var n = 0;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1617 var cnt = 0;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1618 var str = "\t" + insertText
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1619 .Substring(0, insertText.IndexOf(") VALUES ("))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1620 .Substring(7)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1621 .Replace("\r", "")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1622 .Replace("\n", "")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1623 .Replace("\t", " ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1624 .Replace("( ", "(")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1625 //.Replace(" ", " ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1626 + ") VALUES (";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1627
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1628 var parameters = new List<IDbDataParameter>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1629
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1630 foreach (var item in collection)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1631 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1632 if (sb.Length == 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1633 sb.AppendLine("INSERT ALL");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1634
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1635 sb.Append(str);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1636
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1637 foreach (var member in members)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1638 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1639 var value = member.GetValue(item);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1640
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1641 if (value != null && value.GetType().IsEnum)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1642 value = MappingSchema.MapEnumToValue(value, true);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1643
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1644 if (value is Nullable<DateTime>)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1645 value = ((DateTime?)value).Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1646
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1647 if (value is DateTime)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1648 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1649 var dt = (DateTime)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1650 sb.Append(string.Format("to_timestamp('{0:dd.MM.yyyy HH:mm:ss.ffffff}', 'DD.MM.YYYY HH24:MI:SS.FF6')", dt));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1651 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1652 else if (value is string && ((string)value).Length >= 2000)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1653 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1654 var par = db.Parameter("p" + ++pn, value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1655 parameters.Add(par);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1656 sb.Append(":" + par.ParameterName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1657 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1658 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1659 sp.BuildValue(sb, value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1660
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1661 sb.Append(", ");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1662 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1663
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1664 sb.Length -= 2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1665 sb.AppendLine(")");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1666
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1667 n++;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1668
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1669 if (n >= maxBatchSize)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1670 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1671 sb.AppendLine("SELECT * FROM dual");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1672
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1673 var sql = sb.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1674
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1675 if (DbManager.TraceSwitch.TraceInfo)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1676 DbManager.WriteTraceLine("\n" + sql.Replace("\r", ""), DbManager.TraceSwitch.DisplayName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1677
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1678 cnt += db
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1679 .SetCommand(sql, parameters.Count > 0 ? parameters.ToArray() : null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1680 .ExecuteNonQuery();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1681
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1682 parameters.Clear();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1683 pn = 0;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1684 n = 0;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1685 sb.Length = 0;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1686 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1687 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1688
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1689 if (n > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1690 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1691 sb.AppendLine("SELECT * FROM dual");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1692
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1693 var sql = sb.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1694
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1695 if (DbManager.TraceSwitch.TraceInfo)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1696 DbManager.WriteTraceLine("\n" + sql.Replace("\r", ""), DbManager.TraceSwitch.DisplayName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1697
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1698 cnt += db
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1699 .SetCommand(sql, parameters.Count > 0 ? parameters.ToArray() : null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1700 .ExecuteNonQuery();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1701 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1702
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1703 return cnt;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1704 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1705
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1706 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1707 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1708 }