2004-05-13 Umadevi S (sumadevi@novell.com)
[mono.git] / mcs / class / System.Data / System.Data.OleDb / OleDbParameter.cs
index 02aaf32d60bc4bee11eed6fe5f18602bf31220e1..05411be55d89ec350727b2e568b819cd5757192b 100644 (file)
 //
 // System.Data.OleDb.OleDbParameter
 //
-// Author:
+// Authors:
 //   Rodrigo Moya (rodrigo@ximian.com)
+//   Tim Coleman (tim@timcoleman.com)
 //
 // Copyright (C) Rodrigo Moya, 2002
+// Copyright (C) Tim Coleman, 2002
 //
 
+using System;
 using System.Data;
 using System.Data.Common;
+using System.ComponentModel;
 
 namespace System.Data.OleDb
 {
-       public sealed class OleDbParameter : MarshalByRefObject,
-               IDbDataParameter, IDataParameter, ICloneable
+       [TypeConverterAttribute (typeof (OleDbParameterConverter))]
+       public sealed class OleDbParameter : MarshalByRefObject, IDbDataParameter, IDataParameter, ICloneable
        {
-               private string m_name = null;
-               private object m_value = null;
-               private int m_size = 0;
-               private bool m_isNullable = true;
-               private byte m_precision = 0;
-               private byte m_scale = 0;
-               private DataRowVersion m_sourceVersion;
-               private string m_sourceColumn = null;
-               private ParameterDirection m_direction;
-               private DbType m_type;
-
-               /*
-                * Constructors
-                */
+               #region Fields
+
+               string name;
+               object value;
+               int size;
+               bool isNullable;
+               byte precision;
+               byte scale;
+               DataRowVersion sourceVersion;
+               string sourceColumn;
+               ParameterDirection direction;
+               OleDbType oleDbType;
+               DbType dbType;
+               OleDbParameterCollection container = null;              
+
+               IntPtr gdaParameter;
+
+               #endregion
+
+               #region Constructors
                
                public OleDbParameter ()
                {
+                       name = String.Empty;
+                       value = null;
+                       size = 0;
+                       isNullable = true;
+                       precision = 0;
+                       scale = 0;
+                       sourceColumn = String.Empty;
+                       gdaParameter = IntPtr.Zero;
                }
 
-               public OleDbParameter (string name, object value) : this ()
+               public OleDbParameter (string name, object value) 
+                       : this ()
                {
-                       m_name = name;
-                       m_value = value;
+                       this.name = name;
+                       this.value = value;
+                       OleDbType = GetOleDbType (value);
                }
 
-               public OleDbParameter (string name, OleDbType type) : this ()
+               public OleDbParameter (string name, OleDbType dataType) 
+                       : this ()
                {
-                       m_name = name;
-                       m_type = (DbType) type;
+                       this.name = name;
+                       OleDbType = dataType;
                }
 
-               public OleDbParameter (string name, OleDbType type, int width)
-                       : this (name, type)
+               public OleDbParameter (string name, OleDbType dataType, int size)
+                       : this (name, dataType)
                {
-                       m_size = width;
+                       this.size = size;
                }
 
-               public OleDbParameter (string name, OleDbType type,
-                                      int width, string src_col)
-                       : this (name, type, width)
+               public OleDbParameter (string name, OleDbType dataType, int size, string srcColumn)
+                       : this (name, dataType, size)
                {
-                       m_name = name;
-                       m_type = (DbType) type;
-                       m_size = width;
-                       m_sourceColumn = src_col;
-               }
-
-               public OleDbParameter(string name, OleDbType type,
-                                     int width, ParameterDirection direction,
-                                     bool is_nullable, byte precision,
-                                     byte scale, string src_col,
-                                     DataRowVersion src_version, object value)
-                       : this (name, type, width, src_col)
+                       this.sourceColumn = srcColumn;
+               }
+
+               public OleDbParameter(string name, OleDbType dataType, int size, ParameterDirection direction, bool isNullable, byte precision, byte scale, string srcColumn, DataRowVersion srcVersion, object value)
+                       : this (name, dataType, size, srcColumn)
                {
-                       m_direction = direction;
-                       m_isNullable = is_nullable;
-                       m_precision = precision;
-                       m_scale = scale;
-                       m_sourceVersion = src_version;
-                       m_value = value;
+                       this.direction = direction;
+                       this.isNullable = isNullable;
+                       this.precision = precision;
+                       this.scale = scale;
+                       this.sourceVersion = srcVersion;
+                       this.value = value;
                }
 
-               /*
-                * Properties
-                */
+               #endregion
 
-               DbType IDataParameter.DbType
-               {
-                       get {
-                               return m_type;
-                       }
-                       set {
-                               m_type = value;
+               #region Properties
+
+               [BrowsableAttribute (false)]
+               [DataSysDescriptionAttribute ("The parameter generic type")]
+               [RefreshPropertiesAttribute (RefreshProperties.All)]
+               [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
+               public DbType DbType {
+                       get { return dbType; }
+                       set { 
+                               dbType = value;
+                               oleDbType = DbTypeToOleDbType (value);
                        }
                }
                
-               ParameterDirection IDataParameter.Direction
-               {
-                       get {
-                               return m_direction;
-                       }
-                       set {
-                               m_direction = value;
-                       }
+               public ParameterDirection Direction {
+                       get { return direction; }
+                       set { direction = value; }
                }
                
-               bool IDataParameter.IsNullable
-               {
-                       get {
-                               return m_isNullable;
-                       }
+               public bool IsNullable {
+                       get { return isNullable; }\r
+                       set { isNullable = value; }\r
+               }
+
+               public OleDbType OleDbType {
+                       get { return oleDbType; }
                        set {
-                               m_isNullable = value;
+                               oleDbType = value;
+                               dbType = OleDbTypeToDbType (value);
                        }
                }
                
-               string IDataParameter.ParameterName
-               {
-                       get {
-                               return m_name;
-                       }
-                       set {
-                               m_name = value;
-                       }
+               public string ParameterName {
+                       get { return name; }
+                       set { name = value; }
                }
 
-               byte IDbDataParameter.Precision
-               {
-                       get {
-                               return m_precision;
-                       }
-                       set {
-                               m_precision = value;
-                       }
+               public byte Precision {
+                       get { return precision; }
+                       set { precision = value; }
                }
                
-               byte IDbDataParameter.Scale
-               {
-                       get {
-                               return m_scale;
-                       }
-                       set {
-                               m_scale = value;
-                       }
+               public byte Scale {
+                       get { return scale; }
+                       set { scale = value; }
                }
                
-               int IDbDataParameter.Size
-               {
-                       get {
-                               return m_size;
-                       }
-                       set {
-                               m_size = value;
-                       }
+               public int Size {
+                       get { return size; }
+                       set { size = value; }
                }
 
-               string IDataParameter.SourceColumn
-               {
-                       get {
-                               return m_sourceColumn;
-                       }
-                       set {
-                               m_sourceColumn = value;
-                       }
+               public string SourceColumn {
+                       get { return sourceColumn; }
+                       set { sourceColumn = value; }
                }
                
-               DataRowVersion IDataParameter.SourceVersion
-               {
-                       get {
-                               return m_sourceVersion;
-                       }
-                       set {
-                               m_sourceVersion = value;
-                       }
+               public DataRowVersion SourceVersion {
+                       get { return sourceVersion; }
+                       set { sourceVersion = value; }
                }
                
-               object IDataParameter.Value
-               {
-                       get {
-                               return m_value;
-                       }
-                       set {
-                               m_value = value;
-                       }
+               public object Value {
+                       get { return value; }
+                       set { this.value = value; }
+               }
+
+               // Used to ensure that only one collection can contain this
+                // parameter
+                internal OleDbParameterCollection Container {
+                        get { return container; }
+                        set { container = value; }
+                }
+
+
+               #endregion // Properties
+
+               #region Internal Properties
+
+               internal IntPtr GdaParameter {
+                       get { return gdaParameter; }
                }
 
-               /*
-                * Methods
-                */
+               #endregion // Internal Properties
+
+               #region Methods
 
                [MonoTODO]
                object ICloneable.Clone ()
                {
                        throw new NotImplementedException ();
                }
+
+               public override string ToString ()
+               {
+                       return ParameterName;
+               }
+
+               private OleDbType DbTypeToOleDbType (DbType dbType)
+               {
+                       switch (dbType) {
+                       case DbType.AnsiString :
+                               return OleDbType.VarChar;
+                       case DbType.AnsiStringFixedLength :
+                               return OleDbType.Char;
+                       case DbType.Binary :
+                               return OleDbType.Binary;
+                       case DbType.Boolean :
+                               return OleDbType.Boolean;
+                       case DbType.Byte :
+                               return OleDbType.UnsignedTinyInt;
+                       case DbType.Currency :
+                               return OleDbType.Currency;
+                       case DbType.Date :
+                               return OleDbType.Date;
+                       case DbType.DateTime :
+                               throw new NotImplementedException ();
+                       case DbType.Decimal :
+                               return OleDbType.Decimal;
+                       case DbType.Double :
+                               return OleDbType.Double;
+                       case DbType.Guid :
+                               return OleDbType.Guid;
+                       case DbType.Int16 :
+                               return OleDbType.SmallInt;
+                       case DbType.Int32 :
+                               return OleDbType.Integer;
+                       case DbType.Int64 :
+                               return OleDbType.BigInt;
+                       case DbType.Object :
+                               return OleDbType.Variant;
+                       case DbType.SByte :
+                               return OleDbType.TinyInt;
+                       case DbType.Single :
+                               return OleDbType.Single;
+                       case DbType.String :
+                               return OleDbType.WChar;
+                       case DbType.StringFixedLength :
+                               return OleDbType.VarWChar;
+                       case DbType.Time :
+                               throw new NotImplementedException ();
+                       case DbType.UInt16 :
+                               return OleDbType.UnsignedSmallInt;
+                       case DbType.UInt32 :
+                               return OleDbType.UnsignedInt;
+                       case DbType.UInt64 :
+                               return OleDbType.UnsignedBigInt;
+                       case DbType.VarNumeric :
+                               return OleDbType.VarNumeric;
+                       }
+                       return OleDbType.Variant;
+               }
+
+               private DbType OleDbTypeToDbType (OleDbType oleDbType)
+               {
+                       switch (oleDbType) {
+                       case OleDbType.BigInt :
+                               return DbType.Int64;
+                       case OleDbType.Binary :
+                               return DbType.Binary;
+                       case OleDbType.Boolean :
+                               return DbType.Boolean;
+                       case OleDbType.BSTR :
+                               return DbType.AnsiString;
+                       case OleDbType.Char :
+                               return DbType.AnsiStringFixedLength;
+                       case OleDbType.Currency :
+                               return DbType.Currency;
+                       case OleDbType.Date :
+                               return DbType.DateTime;
+                       case OleDbType.DBDate :
+                               return DbType.DateTime;
+                       case OleDbType.DBTime :
+                               throw new NotImplementedException ();
+                       case OleDbType.DBTimeStamp :
+                               return DbType.DateTime;
+                       case OleDbType.Decimal :
+                               return DbType.Decimal;
+                       case OleDbType.Double :
+                               return DbType.Double;
+                       case OleDbType.Empty :
+                               throw new NotImplementedException ();
+                       case OleDbType.Error :
+                               throw new NotImplementedException ();
+                       case OleDbType.Filetime :
+                               return DbType.DateTime;
+                       case OleDbType.Guid :
+                               return DbType.Guid;
+                       case OleDbType.IDispatch :
+                               return DbType.Object;
+                       case OleDbType.Integer :
+                               return DbType.Int32;
+                       case OleDbType.IUnknown :
+                               return DbType.Object;
+                       case OleDbType.LongVarBinary :
+                               return DbType.Binary;
+                       case OleDbType.LongVarChar :
+                               return DbType.AnsiString;
+                       case OleDbType.LongVarWChar :
+                               return DbType.String;
+                       case OleDbType.Numeric :
+                               return DbType.Decimal;
+                       case OleDbType.PropVariant :
+                               return DbType.Object;
+                       case OleDbType.Single :
+                               return DbType.Single;
+                       case OleDbType.SmallInt :
+                               return DbType.Int16;
+                       case OleDbType.TinyInt :
+                               return DbType.SByte;
+                       case OleDbType.UnsignedBigInt :
+                               return DbType.UInt64;
+                       case OleDbType.UnsignedInt :
+                               return DbType.UInt32;
+                       case OleDbType.UnsignedSmallInt :
+                               return DbType.UInt16;
+                       case OleDbType.UnsignedTinyInt :
+                               return DbType.Byte;
+                       case OleDbType.VarBinary :
+                               return DbType.Binary;
+                       case OleDbType.VarChar :
+                               return DbType.AnsiString;
+                       case OleDbType.Variant :
+                               return DbType.Object;
+                       case OleDbType.VarNumeric :
+                               return DbType.VarNumeric;
+                       case OleDbType.VarWChar :
+                               return DbType.StringFixedLength;
+                       case OleDbType.WChar :
+                               return DbType.String;
+                       }
+                       return DbType.Object;
+               }
+
+               private OleDbType GetOleDbType (object value)
+               {
+                       if (value is Guid) return OleDbType.Guid;
+                       if (value is TimeSpan) return OleDbType.DBTime;
+
+                       switch (Type.GetTypeCode (value.GetType ())) {
+                       case TypeCode.Boolean :
+                               return OleDbType.Boolean;
+                       case TypeCode.Byte :
+                               if (value.GetType().IsArray) 
+                                       return OleDbType.Binary;
+                               else 
+                                       return OleDbType.UnsignedTinyInt;
+                       case TypeCode.Char :
+                               return OleDbType.Char;
+                       case TypeCode.DateTime :
+                               return OleDbType.Date;
+                       case TypeCode.DBNull :
+                               return OleDbType.Empty;
+                       case TypeCode.Decimal :
+                               return OleDbType.Decimal;
+                       case TypeCode.Double :
+                               return OleDbType.Double;
+                       case TypeCode.Empty :
+                               return OleDbType.Empty;
+                       case TypeCode.Int16 :
+                               return OleDbType.SmallInt;
+                       case TypeCode.Int32 :
+                               return OleDbType.Integer;
+                       case TypeCode.Int64 :
+                               return OleDbType.BigInt;
+                       case TypeCode.SByte :
+                               return OleDbType.TinyInt;
+                       case TypeCode.String :
+                               return OleDbType.VarChar;
+                       case TypeCode.Single :
+                               return OleDbType.Single;
+                       case TypeCode.UInt64 :
+                               return OleDbType.UnsignedBigInt;
+                       case TypeCode.UInt32 :
+                               return OleDbType.UnsignedInt;
+                       case TypeCode.UInt16 :
+                               return OleDbType.UnsignedSmallInt;
+                       case TypeCode.Object :
+                               return OleDbType.Variant;
+                       }
+                       return OleDbType.IUnknown;
+               }
+
+               #endregion
        }
 }