merged Sys.Web.Services 2.0 support in my branch:
[mono.git] / mcs / class / System.Data / System.Data.Odbc / OdbcParameterCollection.cs
1 //
2 // System.Data.Odbc.OdbcParameterCollection
3 //
4 // Authors:
5 //   Brian Ritchie (brianlritchie@hotmail.com) 
6 //   Umadevi S (sumadevi@novell.com)
7 //
8 // Copyright (C) Brian Ritchie, 2002
9 // Copyright (C) Novell,Inc 
10 //
11
12 //
13 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
14 //
15 // Permission is hereby granted, free of charge, to any person obtaining
16 // a copy of this software and associated documentation files (the
17 // "Software"), to deal in the Software without restriction, including
18 // without limitation the rights to use, copy, modify, merge, publish,
19 // distribute, sublicense, and/or sell copies of the Software, and to
20 // permit persons to whom the Software is furnished to do so, subject to
21 // the following conditions:
22 // 
23 // The above copyright notice and this permission notice shall be
24 // included in all copies or substantial portions of the Software.
25 // 
26 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
30 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
31 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
32 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 //
34
35 using System.Collections;
36 using System.Data;
37 using System.ComponentModel;
38 using System.Data.Common;
39
40 namespace System.Data.Odbc
41 {
42         [ListBindable (false)]
43         [EditorAttribute ("Microsoft.VSDesigner.Data.Design.DBParametersEditor, "+ Consts.AssemblyMicrosoft_VSDesigner, "System.Drawing.Design.UITypeEditor, "+ Consts.AssemblySystem_Drawing )]
44 #if NET_2_0
45         public sealed class OdbcParameterCollection : DbParameterCollection
46 #else
47         public sealed class OdbcParameterCollection : MarshalByRefObject,
48                 IDataParameterCollection, IList, ICollection, IEnumerable
49 #endif // NET_2_0
50         {
51                 #region Fields
52
53                 ArrayList list = new ArrayList ();
54
55                 #endregion // Fields
56         
57                 #region Constructors
58
59                 internal OdbcParameterCollection () {
60                 }
61
62                 #endregion // Constructors
63         
64                 #region Properties
65
66                 [Browsable (false)]
67                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
68                 public 
69 #if NET_2_0
70                 override
71 #endif
72                 int Count {
73                         get { return list.Count; }
74                 }
75
76                 [Browsable (false)]
77                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
78                 public OdbcParameter this[int index] {
79                         get { return (OdbcParameter) list[index]; }
80                         set { list[index] = value; }
81                 }
82
83                 [Browsable (false)]
84                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
85                 public OdbcParameter this[string parameterName] {
86                         get {
87                                 foreach (OdbcParameter p in list)
88                                         if (p.ParameterName.Equals (parameterName))
89                                                 return p;
90                                 throw new IndexOutOfRangeException ("The specified name does not exist: " + parameterName);
91                         }
92                         set {
93                                 if (!Contains (parameterName))
94                                         throw new IndexOutOfRangeException("The specified name does not exist: " + parameterName);
95                                 this [IndexOf (parameterName)] = value;
96                         }
97
98                 }
99
100 #if ONLY_1_1
101                 bool IList.IsFixedSize {
102 #else
103                 public override bool IsFixedSize {
104 #endif
105                         get { return false; }
106                 }
107                 
108 #if ONLY_1_1
109                 bool IList.IsReadOnly {
110 #else
111                 public override bool IsReadOnly {
112 #endif
113                         get { return false; }
114                 }
115                 
116 #if ONLY_1_1    
117                 bool ICollection.IsSynchronized {
118 #else
119                 public override bool IsSynchronized {
120 #endif
121                         get { return list.IsSynchronized; }
122                 }
123
124                 
125 #if ONLY_1_1
126                 object ICollection.SyncRoot {
127 #else
128                 public override object SyncRoot {
129 #endif
130                         get { return list.SyncRoot; }
131                 }
132                 
133 #if ONLY_1_1
134                 object IList.this[int index] {
135                         get { return list[index]; }
136                         set { list[index] = value; }
137                 }
138
139                 object IDataParameterCollection.this[string name]
140                 {
141                         get { return this[name]; }
142                         set {
143                                 if (!(value is OdbcParameter))
144                                         throw new InvalidCastException ("Only OdbcParameter objects can be used.");
145                                 this [name] = (OdbcParameter) value;
146                         }
147
148                 }
149 #endif // ONLY_1_1
150
151                 #endregion // Properties
152
153                 #region Methods
154
155                 public 
156 #if NET_2_0
157                 override
158 #endif
159                 int Add (object value)
160                 {
161                          if (!(value is OdbcParameter))
162                                 throw new InvalidCastException ("The parameter was not an OdbcParameter.");
163                         Add ((OdbcParameter) value);
164                         return IndexOf (value);
165                 }
166
167                 public OdbcParameter Add (OdbcParameter parameter)
168                 {
169                         if (parameter.Container != null)
170                                 throw new ArgumentException ("The OdbcParameter specified in the value parameter is already added to this or another OdbcParameterCollection.");
171                                                                                                     
172                         parameter.Container = this;
173                         list.Add (parameter);
174                         return parameter;
175                 }
176
177                 public OdbcParameter Add (string name, object value)
178                 {
179                         return Add (new OdbcParameter (name, value));
180                 }
181
182                 public OdbcParameter Add (string name, OdbcType type)
183                 {
184                         return Add (new OdbcParameter (name, type));
185                 }
186
187                 public OdbcParameter Add (string name, OdbcType type, int width)
188                 {
189                         return Add (new OdbcParameter (name, type, width));
190                 }
191
192                 public OdbcParameter Add (string name, OdbcType type,
193                                            int width, string src_col)
194                 {
195                         return Add (new OdbcParameter (name, type, width, src_col));
196                 }
197
198                 internal void Bind(IntPtr hstmt)
199                 {
200                         for (int i=0;i<Count;i++)
201                         {
202                                 this[i].Bind(hstmt,i+1);
203                                 
204                         }
205                 }
206
207                 public 
208 #if NET_2_0
209                 override
210 #endif
211                 void Clear()
212                 {
213                         foreach (OdbcParameter p in list)
214                                 p.Container = null;
215                                                                                                     
216                         list.Clear ();
217                 }
218
219                 public
220 #if NET_2_0
221                 override
222 #endif // NET_2_0
223                 bool Contains (object value)
224                 {
225                         if (!(value is OdbcParameter))
226                                 throw new InvalidCastException ("The parameter was not an OdbcParameter.");
227                         return Contains (((OdbcParameter) value).ParameterName);
228                 }
229                                                                                                     
230                 public
231 #if NET_2_0
232                 override
233 #endif // NET_2_0
234                 bool Contains (string value)
235                 {
236                         foreach (OdbcParameter p in this)
237                                 if (p.ParameterName.Equals (value))
238                                         return true;
239                         return false;
240                 }
241
242                 public
243 #if NET_2_0
244                 override
245 #endif // NET_2_0
246                 void CopyTo (Array array, int index)
247                 {
248                         list.CopyTo (array, index);
249                 }
250
251                 public
252 #if NET_2_0
253                 override
254 #endif // NET_2_0
255                 IEnumerator GetEnumerator()
256                 {
257                         return list.GetEnumerator ();
258                 }
259
260                 public
261 #if NET_2_0
262                 override
263 #endif // NET_2_0
264                 int IndexOf (object value)
265                 {
266                         if (!(value is OdbcParameter))
267                                 throw new InvalidCastException ("The parameter was not an OdbcParameter.");
268                         return IndexOf (((OdbcParameter) value).ParameterName);
269                 }
270                                                                                                     
271                 public
272 #if NET_2_0
273                 override
274 #endif // NET_2_0
275                 int IndexOf (string parameterName)
276                 {
277                         for (int i = 0; i < Count; i += 1)
278                                 if (this [i].ParameterName.Equals (parameterName))
279                                         return i;
280                         return -1;             
281                 }
282
283                 public
284 #if NET_2_0
285                 override
286 #endif // NET_2_0
287                 void Insert (int index, object value)
288                 {
289                         list.Insert (index, value);
290                 }
291                                                                                                     
292                 public
293 #if NET_2_0
294                 override
295 #endif // NET_2_0
296                 void Remove (object value)
297                 {
298                         ((OdbcParameter) value).Container = null;
299                         list.Remove (value);
300                 }
301                                                                                                     
302                 public
303 #if NET_2_0
304                 override
305 #endif // NET_2_0
306                 void RemoveAt (int index)
307                 {
308                         this [index].Container = null;
309                         list.RemoveAt (index);
310                 }
311                                                                                                     
312                 public
313 #if NET_2_0
314                 override
315 #endif // NET_2_0
316                 void RemoveAt (string parameterName)
317                 {
318                         RemoveAt (IndexOf (parameterName));
319                 }
320
321
322 #if NET_2_0
323                 [MonoTODO]
324                 protected override DbParameter GetParameter (string name)
325                 {
326                         throw new NotImplementedException ();
327                 }
328
329                 [MonoTODO]
330                 protected override DbParameter GetParameter (int index)
331                 {
332                         throw new NotImplementedException ();
333                 }
334
335                 [MonoTODO]
336                 protected override void SetParameter (string name, DbParameter value)
337                 {
338                         throw new NotImplementedException ();
339                 }
340
341                 [MonoTODO]
342                 protected override void SetParameter (int index, DbParameter value)
343                 {
344                         throw new NotImplementedException ();
345                 }
346
347                 [MonoTODO]
348                 public override void AddRange (Array values)
349                 {
350                         throw new NotImplementedException ();
351                 }
352 #endif
353                 #endregion // Methods
354
355         }
356 }