annotate Source/Data/DataProvider/OracleDataProvider.cs @ 4:f757da6161a1

!bug 100 + 2h fixed gregression
author cin
date Sun, 24 Aug 2014 17:57:42 +0400
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Data.Common;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Data.OracleClient;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using System.Globalization;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 namespace BLToolkit.Data.DataProvider
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using Sql.SqlProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 #if FW4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 [Obsolete("OracleDataProvider has been deprecated. http://go.microsoft.com/fwlink/?LinkID=144260")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 #pragma warning disable 0618
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 /// Implements access to the Data Provider for Oracle.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 public sealed class OracleDataProvider : DataProviderBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 private string _parameterPrefix = "P";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 public string ParameterPrefix
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 get { return _parameterPrefix; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 set
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 _parameterPrefix = string.IsNullOrEmpty(value)? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 value.ToUpper(CultureInfo.InvariantCulture);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 /// Creates the database connection object.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 /// <returns>The database connection object.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 public override IDbConnection CreateConnectionObject()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 return new OracleConnection();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 /// Creates the data adapter object.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 /// <returns>A data adapter object.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 public override DbDataAdapter CreateDataAdapterObject()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 return new OracleDataAdapter();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 /// Populates the specified <see cref="IDbCommand"/> object's Parameters collection with
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 /// parameter information for the stored procedure specified in the <see cref="IDbCommand"/>.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 /// <param name="command">The <see cref="IDbCommand"/> referencing the stored procedure for which the parameter information is to be derived. The derived parameters will be populated into the Parameters of this command.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 public override bool DeriveParameters(IDbCommand command)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 OracleCommandBuilder.DeriveParameters((OracleCommand)command);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 return true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 public override object Convert(object value, ConvertType convertType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 switch (convertType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 case ConvertType.NameToCommandParameter:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 case ConvertType.NameToSprocParameter:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 return ParameterPrefix == null? value: ParameterPrefix + value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 case ConvertType.SprocParameterToName:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 var name = (string)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 if (name.Length > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 if (name[0] == ':')
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 return name.Substring(1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 if (ParameterPrefix != null &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 name.ToUpper(CultureInfo.InvariantCulture).StartsWith(ParameterPrefix))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 return name.Substring(ParameterPrefix.Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 case ConvertType.ExceptionToErrorNumber:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 if (value is OracleException)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 return ((OracleException)value).Code;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 return SqlProvider.Convert(value, convertType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 /// Returns connection type.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 /// <value>An instance of the <see cref="Type"/> class.</value>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 public override Type ConnectionType
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 get { return typeof(OracleConnection); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 public const string NameString = "Oracle";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 /// Returns the data provider name.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataProvider Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 /// <value>Data provider name.</value>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 public override string Name
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 get { return NameString; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 public override ISqlProvider CreateSqlProvider()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 return new OracleSqlProvider();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 #if FW4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 #pragma warning restore 0618
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 }