SqlParameterCollection.cs 5.4 KB

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