Modified SQLDescribeCol to work around bug in pinvoke...when doing a ref on a typed...
[mono.git] / mcs / class / System.Data / System.Data.Odbc / OdbcParameter.cs
1 //
2 // System.Data.Odbc.OdbcParameter
3 //
4 // Authors:
5 //   Brian Ritchie (brianlritchie@hotmail.com)
6 //
7 // Copyright (C) Brian Ritchie, 2002
8 //
9
10 using System;
11 using System.Data;
12 using System.Data.Common;
13
14 namespace System.Data.Odbc
15 {
16         public sealed class OdbcParameter : MarshalByRefObject, IDbDataParameter, IDataParameter, ICloneable
17         {
18                 #region Fields
19
20                 string name;
21                 object value;
22                 int size;
23                 bool isNullable;
24                 byte precision;
25                 byte scale;
26                 DataRowVersion sourceVersion;
27                 string sourceColumn;
28                 ParameterDirection direction;
29                 OdbcType odbcType;
30                 DbType dbType;
31
32                 int IntValue;
33
34                 #endregion
35
36                 #region Constructors
37                 
38                 public OdbcParameter ()
39                 {
40                         name = String.Empty;
41                         value = null;
42                         size = 0;
43                         isNullable = true;
44                         precision = 0;
45                         scale = 0;
46                         sourceColumn = String.Empty;
47                 }
48
49                 public OdbcParameter (string name, object value) 
50                         : this ()
51                 {
52                         this.name = name;
53                         this.value = value;
54                 }
55
56                 public OdbcParameter (string name, OdbcType dataType) 
57                         : this ()
58                 {
59                         this.name = name;
60                         OdbcType = dataType;
61
62                         // These paramter types aren't supported yet...
63                         if (odbcType==OdbcType.Date || odbcType==OdbcType.Time || odbcType==OdbcType.DateTime ||
64                                 OdbcType==OdbcType.Timestamp || odbcType==OdbcType.SmallDateTime)
65                                 throw new NotSupportedException();
66                 }
67
68                 public OdbcParameter (string name, OdbcType dataType, int size)
69                         : this (name, dataType)
70                 {
71                         this.size = size;
72                 }
73
74                 public OdbcParameter (string name, OdbcType dataType, int size, string srcColumn)
75                         : this (name, dataType, size)
76                 {
77                         this.sourceColumn = srcColumn;
78                 }
79
80                 public OdbcParameter(string name, OdbcType dataType, int size, ParameterDirection direction, bool isNullable, byte precision, byte scale, string srcColumn, DataRowVersion srcVersion, object value)
81                         : this (name, dataType, size, srcColumn)
82                 {
83                         this.direction = direction;
84                         this.isNullable = isNullable;
85                         this.precision = precision;
86                         this.scale = scale;
87                         this.sourceVersion = srcVersion;
88                         this.value = value;
89                 }
90
91                 #endregion
92
93                 #region Properties
94
95                 public DbType DbType {
96                         get { return dbType; }
97                         set { 
98                                 dbType = value;
99                         }
100                 }
101                 
102                 public ParameterDirection Direction {
103                         get { return direction; }
104                         set { direction = value; }
105                 }
106                 
107                 public bool IsNullable {
108                         get { return isNullable; }
109                 }
110
111                 public OdbcType OdbcType {
112                         get { return odbcType; }
113                         set {
114                                 odbcType = value;
115                         }
116                 }
117                 
118                 public string ParameterName {
119                         get { return name; }
120                         set { name = value; }
121                 }
122
123                 public byte Precision {
124                         get { return precision; }
125                         set { precision = value; }
126                 }
127                 
128                 public byte Scale {
129                         get { return scale; }
130                         set { scale = value; }
131                 }
132                 
133                 public int Size {
134                         get { return size; }
135                         set { size = value; }
136                 }
137
138                 public string SourceColumn {
139                         get { return sourceColumn; }
140                         set { sourceColumn = value; }
141                 }
142                 
143                 public DataRowVersion SourceVersion {
144                         get { return sourceVersion; }
145                         set { sourceVersion = value; }
146                 }
147                 
148                 public object Value {
149                         get { 
150                                 return IntValue;
151                         }
152                         set { this.IntValue =(int) value; }
153                 }
154
155                 #endregion // Properties
156
157                 #region Internal Properties
158
159                 internal void Bind(IntPtr hstmt,int ParamNum)
160                 {
161                         OdbcReturn ret=libodbc.SQLBindParam(hstmt, Convert.ToInt16(ParamNum), (short) odbcType, (short) odbcType, 0,0,ref IntValue, 0);
162                         libodbchelper.DisplayError("SQLBindParam",ret);         
163                 }
164                 
165                 #endregion // Internal Properties
166
167                 #region Methods
168
169                 [MonoTODO]
170                 object ICloneable.Clone ()
171                 {
172                         throw new NotImplementedException ();
173                 }
174
175                 public override string ToString ()
176                 {
177                         return ParameterName;
178                 }
179                 #endregion
180         }
181 }