SqlParameterCollection.cs 5.7 KB

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