annotate Source/Data/DataProvider/OleDbDataProvider.cs @ 3:1ef98bd70424

!bug 100 +3h Исправление проблемы BLToolkit + mono 3.4
author cin
date Fri, 22 Aug 2014 17:34:46 +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.OleDb;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 namespace BLToolkit.Data.DataProvider
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using Sql.SqlProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 /// Implements access to the Data Provider for OLE DB.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 public class OleDbDataProvider : DataProviderBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 /// Creates the database connection object.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 /// <returns>The database connection object.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 public override IDbConnection CreateConnectionObject()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 return new OleDbConnection();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 /// Creates the data adapter object.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 /// <returns>A data adapter object.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 public override DbDataAdapter CreateDataAdapterObject()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 return new OleDbDataAdapter();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 /// Populates the specified <see cref="IDbCommand"/> object's Parameters collection with
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 /// parameter information for the stored procedure specified in the <see cref="IDbCommand"/>.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 /// <param name="command">The <see cref="IDbCommand"/> referencing the stored procedure for which
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 /// the parameter information is to be derived. The derived parameters will be
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 /// populated into the Parameters of this command.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 public override bool DeriveParameters(IDbCommand command)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 OleDbCommandBuilder.DeriveParameters((OleDbCommand)command);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 return true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 public override object Convert(object value, ConvertType convertType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 switch (convertType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 case ConvertType.NameToQueryParameter:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 case ConvertType.NameToCommandParameter:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 case ConvertType.NameToSprocParameter:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 return "@" + value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 case ConvertType.NameToQueryField:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 case ConvertType.NameToQueryFieldAlias:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 case ConvertType.NameToQueryTableAlias:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 var name = value.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 if (name.Length > 0 && name[0] == '[')
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 return value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 return "[" + value + "]";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 case ConvertType.NameToDatabase:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 case ConvertType.NameToOwner:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 case ConvertType.NameToQueryTable:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 var name = value.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 if (name.Length > 0 && name[0] == '[')
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 return value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 if (name.IndexOf('.') > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 value = string.Join("].[", name.Split('.'));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 return "[" + value + "]";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 case ConvertType.SprocParameterToName:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 if (value != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 var str = value.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 return str.Length > 0 && str[0] == '@'? str.Substring(1): str;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 case ConvertType.ExceptionToErrorNumber:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 if (value is OleDbException)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 var ex = (OleDbException)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 if (ex.Errors.Count > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 return ex.Errors[0].NativeError;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 return value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 public override ISqlProvider CreateSqlProvider()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 throw new NotSupportedException();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 /// Returns connection type.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataManager Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 /// <value>An instance of the <see cref="Type"/> class.</value>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 public override Type ConnectionType
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 get { return typeof(OleDbConnection); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 public const string NameString = DataProvider.ProviderName.OleDb;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 /// Returns the data provider name.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 /// <remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 /// See the <see cref="DbManager.AddDataProvider(DataProviderBase)"/> method to find an example.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 /// </remarks>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 /// <seealso cref="DbManager.AddDataProvider(DataProviderBase)">AddDataProvider Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 /// <value>Data provider name.</value>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 public override string Name
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 get { return NameString; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 }