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

update bltoolkit
author nickolay
date Thu, 05 Apr 2018 20:53:26 +0300
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Data.Common;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Globalization;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using System.Threading;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using IBM.Data.Informix;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 namespace BLToolkit.Data.DataProvider
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 using Sql.SqlProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 public class InformixDataProvider : DataProviderBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 public override IDbConnection CreateConnectionObject () { return new IfxConnection (); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 public override DbDataAdapter CreateDataAdapterObject() { return new IfxDataAdapter (); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 public override ISqlProvider CreateSqlProvider () { return new InformixSqlProvider(); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 public override Type ConnectionType { get { return typeof(IfxConnection); } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 public override string Name { get { return DataProvider.ProviderName.Informix; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 public override bool DeriveParameters(IDbCommand command)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 if (command is IfxCommand)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 IfxCommandBuilder.DeriveParameters((IfxCommand)command);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 return true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 public override object Convert(object value, ConvertType convertType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 switch (convertType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 case ConvertType.ExceptionToErrorNumber:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 if (value is IfxException)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 var ex = (IfxException)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 foreach (IfxError error in ex.Errors)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 return error.NativeError;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 return 0;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 return SqlProvider.Convert(value, convertType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 public override void PrepareCommand(ref CommandType commandType, ref string commandText, ref IDbDataParameter[] commandParameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 base.PrepareCommand(ref commandType, ref commandText, ref commandParameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 if (commandParameters != null) foreach (var p in commandParameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 if (p.Value is Guid)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 var value = p.Value.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 p.DbType = DbType.AnsiStringFixedLength;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 p.Value = value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 p.Size = value.Length;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 else if (p.Value is bool)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 p.Value = ((InformixSqlProvider)SqlProvider).ConvertBooleanValue((bool)p.Value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 //else if (p.DbType == DbType.Binary)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 //{
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 // var ip = (IfxParameter)p;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 // ip.IfxType = IfxType.Blob;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 //}
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 /*
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 public override int ExecuteArray(IDbCommand command, int iterations)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 var cmd = (IfxCommand)command;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 cmd.ArrayBindCount = iterations;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 return cmd.ExecuteNonQuery();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 cmd.ArrayBindCount = 0;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 */
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 #region GetDataReader
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 public override IDataReader GetDataReader(Mapping.MappingSchema schema, IDataReader dataReader)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 return dataReader is IfxDataReader?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 new InformixDataReaderEx((IfxDataReader)dataReader):
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 base.GetDataReader(schema, dataReader);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 class InformixDataReaderEx : DataReaderBase<IfxDataReader>, IDataReader
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 public InformixDataReaderEx(IfxDataReader rd): base(rd)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 public new float GetFloat(int i)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 var current = Thread.CurrentThread.CurrentCulture;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 if (Thread.CurrentThread.CurrentCulture != CultureInfo.InvariantCulture)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 var value = DataReader.GetFloat(i);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 if (current != CultureInfo.InvariantCulture)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 Thread.CurrentThread.CurrentCulture = current;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 return value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 public new double GetDouble(int i)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 var current = Thread.CurrentThread.CurrentCulture;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 if (Thread.CurrentThread.CurrentCulture != CultureInfo.InvariantCulture)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 var value = DataReader.GetDouble(i);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 if (current != CultureInfo.InvariantCulture)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 Thread.CurrentThread.CurrentCulture = current;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 return value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 public new decimal GetDecimal(int i)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 var current = Thread.CurrentThread.CurrentCulture;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 if (Thread.CurrentThread.CurrentCulture != CultureInfo.InvariantCulture)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 var value = DataReader.GetDecimal (i);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 if (current != CultureInfo.InvariantCulture)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 Thread.CurrentThread.CurrentCulture = current;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 return value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 }