OdbcParameterCollection.cs 10 KB

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