2 // System.Data.OleDb.OleDbParameter
5 // Rodrigo Moya (rodrigo@ximian.com)
6 // Tim Coleman (tim@timcoleman.com)
8 // Copyright (C) Rodrigo Moya, 2002
9 // Copyright (C) Tim Coleman, 2002
14 using System.Data.Common;
16 namespace System.Data.OleDb
18 public sealed class OleDbParameter : MarshalByRefObject, IDbDataParameter, IDataParameter, ICloneable
28 DataRowVersion sourceVersion;
30 ParameterDirection direction;
33 OleDbParameterCollection container = null;
41 public OleDbParameter ()
49 sourceColumn = String.Empty;
50 gdaParameter = IntPtr.Zero;
53 public OleDbParameter (string name, object value)
58 OleDbType = GetOleDbType (value);
61 public OleDbParameter (string name, OleDbType dataType)
68 public OleDbParameter (string name, OleDbType dataType, int size)
69 : this (name, dataType)
74 public OleDbParameter (string name, OleDbType dataType, int size, string srcColumn)
75 : this (name, dataType, size)
77 this.sourceColumn = srcColumn;
80 public OleDbParameter(string name, OleDbType dataType, int size, ParameterDirection direction, bool isNullable, byte precision, byte scale, string srcColumn, DataRowVersion srcVersion, object value)
81 : this (name, dataType, size, srcColumn)
83 this.direction = direction;
84 this.isNullable = isNullable;
85 this.precision = precision;
87 this.sourceVersion = srcVersion;
95 public DbType DbType {
96 get { return dbType; }
99 oleDbType = DbTypeToOleDbType (value);
103 public ParameterDirection Direction {
104 get { return direction; }
105 set { direction = value; }
108 public bool IsNullable {
109 get { return isNullable; }
\r
110 set { isNullable = value; }
\r
113 public OleDbType OleDbType {
114 get { return oleDbType; }
117 dbType = OleDbTypeToDbType (value);
121 public string ParameterName {
123 set { name = value; }
126 public byte Precision {
127 get { return precision; }
128 set { precision = value; }
132 get { return scale; }
133 set { scale = value; }
138 set { size = value; }
141 public string SourceColumn {
142 get { return sourceColumn; }
143 set { sourceColumn = value; }
146 public DataRowVersion SourceVersion {
147 get { return sourceVersion; }
148 set { sourceVersion = value; }
151 public object Value {
152 get { return value; }
153 set { this.value = value; }
156 // Used to ensure that only one collection can contain this
158 internal OleDbParameterCollection Container {
159 get { return container; }
160 set { container = value; }
164 #endregion // Properties
166 #region Internal Properties
168 internal IntPtr GdaParameter {
169 get { return gdaParameter; }
172 #endregion // Internal Properties
177 object ICloneable.Clone ()
179 throw new NotImplementedException ();
182 public override string ToString ()
184 return ParameterName;
187 private OleDbType DbTypeToOleDbType (DbType dbType)
190 case DbType.AnsiString :
191 return OleDbType.VarChar;
192 case DbType.AnsiStringFixedLength :
193 return OleDbType.Char;
195 return OleDbType.Binary;
196 case DbType.Boolean :
197 return OleDbType.Boolean;
199 return OleDbType.UnsignedTinyInt;
200 case DbType.Currency :
201 return OleDbType.Currency;
203 return OleDbType.Date;
204 case DbType.DateTime :
205 throw new NotImplementedException ();
206 case DbType.Decimal :
207 return OleDbType.Decimal;
209 return OleDbType.Double;
211 return OleDbType.Guid;
213 return OleDbType.SmallInt;
215 return OleDbType.Integer;
217 return OleDbType.BigInt;
219 return OleDbType.Variant;
221 return OleDbType.TinyInt;
223 return OleDbType.Single;
225 return OleDbType.WChar;
226 case DbType.StringFixedLength :
227 return OleDbType.VarWChar;
229 throw new NotImplementedException ();
231 return OleDbType.UnsignedSmallInt;
233 return OleDbType.UnsignedInt;
235 return OleDbType.UnsignedBigInt;
236 case DbType.VarNumeric :
237 return OleDbType.VarNumeric;
239 return OleDbType.Variant;
242 private DbType OleDbTypeToDbType (OleDbType oleDbType)
245 case OleDbType.BigInt :
247 case OleDbType.Binary :
248 return DbType.Binary;
249 case OleDbType.Boolean :
250 return DbType.Boolean;
251 case OleDbType.BSTR :
252 return DbType.AnsiString;
253 case OleDbType.Char :
254 return DbType.AnsiStringFixedLength;
255 case OleDbType.Currency :
256 return DbType.Currency;
257 case OleDbType.Date :
258 return DbType.DateTime;
259 case OleDbType.DBDate :
260 return DbType.DateTime;
261 case OleDbType.DBTime :
262 throw new NotImplementedException ();
263 case OleDbType.DBTimeStamp :
264 return DbType.DateTime;
265 case OleDbType.Decimal :
266 return DbType.Decimal;
267 case OleDbType.Double :
268 return DbType.Double;
269 case OleDbType.Empty :
270 throw new NotImplementedException ();
271 case OleDbType.Error :
272 throw new NotImplementedException ();
273 case OleDbType.Filetime :
274 return DbType.DateTime;
275 case OleDbType.Guid :
277 case OleDbType.IDispatch :
278 return DbType.Object;
279 case OleDbType.Integer :
281 case OleDbType.IUnknown :
282 return DbType.Object;
283 case OleDbType.LongVarBinary :
284 return DbType.Binary;
285 case OleDbType.LongVarChar :
286 return DbType.AnsiString;
287 case OleDbType.LongVarWChar :
288 return DbType.String;
289 case OleDbType.Numeric :
290 return DbType.Decimal;
291 case OleDbType.PropVariant :
292 return DbType.Object;
293 case OleDbType.Single :
294 return DbType.Single;
295 case OleDbType.SmallInt :
297 case OleDbType.TinyInt :
299 case OleDbType.UnsignedBigInt :
300 return DbType.UInt64;
301 case OleDbType.UnsignedInt :
302 return DbType.UInt32;
303 case OleDbType.UnsignedSmallInt :
304 return DbType.UInt16;
305 case OleDbType.UnsignedTinyInt :
307 case OleDbType.VarBinary :
308 return DbType.Binary;
309 case OleDbType.VarChar :
310 return DbType.AnsiString;
311 case OleDbType.Variant :
312 return DbType.Object;
313 case OleDbType.VarNumeric :
314 return DbType.VarNumeric;
315 case OleDbType.VarWChar :
316 return DbType.StringFixedLength;
317 case OleDbType.WChar :
318 return DbType.String;
320 return DbType.Object;
323 private OleDbType GetOleDbType (object value)
325 if (value is Guid) return OleDbType.Guid;
326 if (value is TimeSpan) return OleDbType.DBTime;
328 switch (Type.GetTypeCode (value.GetType ())) {
329 case TypeCode.Boolean :
330 return OleDbType.Boolean;
332 if (value.GetType().IsArray)
333 return OleDbType.Binary;
335 return OleDbType.UnsignedTinyInt;
337 return OleDbType.Char;
338 case TypeCode.DateTime :
339 return OleDbType.Date;
340 case TypeCode.DBNull :
341 return OleDbType.Empty;
342 case TypeCode.Decimal :
343 return OleDbType.Decimal;
344 case TypeCode.Double :
345 return OleDbType.Double;
346 case TypeCode.Empty :
347 return OleDbType.Empty;
348 case TypeCode.Int16 :
349 return OleDbType.SmallInt;
350 case TypeCode.Int32 :
351 return OleDbType.Integer;
352 case TypeCode.Int64 :
353 return OleDbType.BigInt;
354 case TypeCode.SByte :
355 return OleDbType.TinyInt;
356 case TypeCode.String :
357 return OleDbType.VarChar;
358 case TypeCode.Single :
359 return OleDbType.Single;
360 case TypeCode.UInt64 :
361 return OleDbType.UnsignedBigInt;
362 case TypeCode.UInt32 :
363 return OleDbType.UnsignedInt;
364 case TypeCode.UInt16 :
365 return OleDbType.UnsignedSmallInt;
366 case TypeCode.Object :
367 return OleDbType.Variant;
369 return OleDbType.IUnknown;