SqlParameterCollection.cs 5.4 KB

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