SqlParameterCollection.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. //
  2. // System.Data.SqlClient.SqlParameterCollection.cs
  3. //
  4. // Author:
  5. // Rodrigo Moya ([email protected])
  6. // Daniel Morgan ([email protected])
  7. // Tim Coleman ([email protected])
  8. //
  9. // (C) Ximian, Inc 2002
  10. // Copyright (C) Tim Coleman, 2002
  11. //
  12. using System;
  13. using System.ComponentModel;
  14. using System.Data;
  15. using System.Data.Common;
  16. using System.Collections;
  17. namespace System.Data.SqlClient {
  18. [ListBindable (false)]
  19. public sealed class SqlParameterCollection : MarshalByRefObject, IDataParameterCollection, IList, ICollection, IEnumerable
  20. {
  21. #region Fields
  22. ArrayList list = new ArrayList();
  23. SqlCommand command;
  24. #endregion // Fields
  25. #region Constructors
  26. internal SqlParameterCollection (SqlCommand command)
  27. {
  28. this.command = command;
  29. }
  30. #endregion // Constructors
  31. #region Properties
  32. [Browsable (false)]
  33. [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
  34. public int Count {
  35. get { return list.Count; }
  36. }
  37. object IList.this [int index] {
  38. [MonoTODO]
  39. get {
  40. return (SqlParameter) this[index];
  41. }
  42. [MonoTODO]
  43. set {
  44. this[index] = (SqlParameter) value;
  45. }
  46. }
  47. [Browsable (false)]
  48. [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
  49. public SqlParameter this [int index] {
  50. get { return (SqlParameter) list[index]; }
  51. set { list[index] = (SqlParameter) value; }
  52. }
  53. object IDataParameterCollection.this [string parameterName] {
  54. get { return this[parameterName]; }
  55. set {
  56. CheckType(value);
  57. this[parameterName] = (SqlParameter) value;
  58. }
  59. }
  60. [Browsable (false)]
  61. [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
  62. public SqlParameter this [string parameterName] {
  63. get {
  64. foreach (SqlParameter p in list)
  65. if (p.ParameterName.Equals (parameterName))
  66. return p;
  67. throw new IndexOutOfRangeException ("The specified name does not exist: " + parameterName);
  68. }
  69. set {
  70. if (!Contains (parameterName))
  71. throw new IndexOutOfRangeException("The specified name does not exist: " + parameterName);
  72. this [IndexOf (parameterName)] = value;
  73. }
  74. }
  75. bool IList.IsFixedSize {
  76. get { throw new NotImplementedException (); }
  77. }
  78. bool IList.IsReadOnly {
  79. get { throw new NotImplementedException (); }
  80. }
  81. bool ICollection.IsSynchronized {
  82. get { throw new NotImplementedException (); }
  83. }
  84. object ICollection.SyncRoot {
  85. get { throw new NotImplementedException (); }
  86. }
  87. #endregion // Properties
  88. #region Methods
  89. public int Add (object value)
  90. {
  91. // Check if value is a SqlParameter.
  92. CheckType (value);
  93. Add ((SqlParameter) value);
  94. return IndexOf (value);
  95. }
  96. public SqlParameter Add (SqlParameter value)
  97. {
  98. list.Add (value);
  99. return value;
  100. }
  101. public SqlParameter Add (string parameterName, object value)
  102. {
  103. SqlParameter sqlparam = new SqlParameter();
  104. sqlparam.Value = value;
  105. // TODO: Get the dbtype and Sqldbtype from system type of value.
  106. return Add(sqlparam);
  107. }
  108. public SqlParameter Add (string parameterName, SqlDbType sqlDbType)
  109. {
  110. SqlParameter sqlparam = new SqlParameter();
  111. sqlparam.ParameterName = parameterName;
  112. sqlparam.SqlDbType = sqlDbType;
  113. return Add(sqlparam);
  114. }
  115. public SqlParameter Add (string parameterName, SqlDbType sqlDbType, int size)
  116. {
  117. SqlParameter sqlparam = new SqlParameter();
  118. sqlparam.ParameterName = parameterName;
  119. sqlparam.SqlDbType = sqlDbType;
  120. sqlparam.Size = size;
  121. return Add(sqlparam);
  122. }
  123. public SqlParameter Add (string parameterName, SqlDbType sqlDbType, int size, string sourceColumn)
  124. {
  125. SqlParameter sqlparam = new SqlParameter ();
  126. sqlparam.ParameterName = parameterName;
  127. sqlparam.SqlDbType = sqlDbType;
  128. sqlparam.Size = size;
  129. sqlparam.SourceColumn = sourceColumn;
  130. return Add (sqlparam);
  131. }
  132. public void Clear()
  133. {
  134. list.Clear ();
  135. }
  136. public bool Contains (object value)
  137. {
  138. CheckType (value);
  139. return Contains (((SqlParameter) value).ParameterName);
  140. }
  141. public bool Contains (string value)
  142. {
  143. foreach (SqlParameter p in list)
  144. if (p.ParameterName.Equals (value))
  145. return true;
  146. return false;
  147. }
  148. [MonoTODO]
  149. public void CopyTo(Array array, int index)
  150. {
  151. throw new NotImplementedException ();
  152. }
  153. public IEnumerator GetEnumerator()
  154. {
  155. return list.GetEnumerator ();
  156. }
  157. public int IndexOf (object value)
  158. {
  159. CheckType (value);
  160. return IndexOf (((SqlParameter) value).ParameterName);
  161. }
  162. public int IndexOf (string parameterName)
  163. {
  164. return list.IndexOf (parameterName);
  165. }
  166. public void Insert (int index, object value)
  167. {
  168. list.Insert (index, value);
  169. }
  170. public void Remove (object value)
  171. {
  172. list.Remove (value);
  173. }
  174. public void RemoveAt (int index)
  175. {
  176. list.RemoveAt (index);
  177. }
  178. public void RemoveAt (string parameterName)
  179. {
  180. RemoveAt (IndexOf (parameterName));
  181. }
  182. /// <summary>
  183. /// This method checks if the parameter value is of
  184. /// SqlParameter type. If it doesn't, throws an InvalidCastException.
  185. /// </summary>
  186. private void CheckType(object value)
  187. {
  188. if(!(value is SqlParameter))
  189. throw new InvalidCastException("Only SQLParameter objects can be used.");
  190. }
  191. #endregion // Methods
  192. }
  193. }