OleDbParameter.cs 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. //
  2. // System.Data.OleDb.OleDbParameter
  3. //
  4. // Authors:
  5. // Rodrigo Moya ([email protected])
  6. // Tim Coleman ([email protected])
  7. //
  8. // Copyright (C) Rodrigo Moya, 2002
  9. // Copyright (C) Tim Coleman, 2002
  10. //
  11. using System;
  12. using System.Data;
  13. using System.Data.Common;
  14. namespace System.Data.OleDb
  15. {
  16. public sealed class OleDbParameter : MarshalByRefObject, IDbDataParameter, IDataParameter, ICloneable
  17. {
  18. #region Fields
  19. string name;
  20. object value;
  21. int size;
  22. bool isNullable;
  23. byte precision;
  24. byte scale;
  25. DataRowVersion sourceVersion;
  26. string sourceColumn;
  27. ParameterDirection direction;
  28. OleDbType oleDbType;
  29. DbType dbType;
  30. OleDbParameterCollection container = null;
  31. IntPtr gdaParameter;
  32. #endregion
  33. #region Constructors
  34. public OleDbParameter ()
  35. {
  36. name = String.Empty;
  37. value = null;
  38. size = 0;
  39. isNullable = true;
  40. precision = 0;
  41. scale = 0;
  42. sourceColumn = String.Empty;
  43. gdaParameter = IntPtr.Zero;
  44. }
  45. public OleDbParameter (string name, object value)
  46. : this ()
  47. {
  48. this.name = name;
  49. this.value = value;
  50. OleDbType = GetOleDbType (value);
  51. }
  52. public OleDbParameter (string name, OleDbType dataType)
  53. : this ()
  54. {
  55. this.name = name;
  56. OleDbType = dataType;
  57. }
  58. public OleDbParameter (string name, OleDbType dataType, int size)
  59. : this (name, dataType)
  60. {
  61. this.size = size;
  62. }
  63. public OleDbParameter (string name, OleDbType dataType, int size, string srcColumn)
  64. : this (name, dataType, size)
  65. {
  66. this.sourceColumn = srcColumn;
  67. }
  68. public OleDbParameter(string name, OleDbType dataType, int size, ParameterDirection direction, bool isNullable, byte precision, byte scale, string srcColumn, DataRowVersion srcVersion, object value)
  69. : this (name, dataType, size, srcColumn)
  70. {
  71. this.direction = direction;
  72. this.isNullable = isNullable;
  73. this.precision = precision;
  74. this.scale = scale;
  75. this.sourceVersion = srcVersion;
  76. this.value = value;
  77. }
  78. #endregion
  79. #region Properties
  80. public DbType DbType {
  81. get { return dbType; }
  82. set {
  83. dbType = value;
  84. oleDbType = DbTypeToOleDbType (value);
  85. }
  86. }
  87. public ParameterDirection Direction {
  88. get { return direction; }
  89. set { direction = value; }
  90. }
  91. public bool IsNullable {
  92. get { return isNullable; }
  93. }
  94. public OleDbType OleDbType {
  95. get { return oleDbType; }
  96. set {
  97. oleDbType = value;
  98. dbType = OleDbTypeToDbType (value);
  99. }
  100. }
  101. public string ParameterName {
  102. get { return name; }
  103. set { name = value; }
  104. }
  105. public byte Precision {
  106. get { return precision; }
  107. set { precision = value; }
  108. }
  109. public byte Scale {
  110. get { return scale; }
  111. set { scale = value; }
  112. }
  113. public int Size {
  114. get { return size; }
  115. set { size = value; }
  116. }
  117. public string SourceColumn {
  118. get { return sourceColumn; }
  119. set { sourceColumn = value; }
  120. }
  121. public DataRowVersion SourceVersion {
  122. get { return sourceVersion; }
  123. set { sourceVersion = value; }
  124. }
  125. public object Value {
  126. get { return value; }
  127. set { this.value = value; }
  128. }
  129. // Used to ensure that only one collection can contain this
  130. // parameter
  131. internal OleDbParameterCollection Container {
  132. get { return container; }
  133. set { container = value; }
  134. }
  135. #endregion // Properties
  136. #region Internal Properties
  137. internal IntPtr GdaParameter {
  138. get { return gdaParameter; }
  139. }
  140. #endregion // Internal Properties
  141. #region Methods
  142. [MonoTODO]
  143. object ICloneable.Clone ()
  144. {
  145. throw new NotImplementedException ();
  146. }
  147. public override string ToString ()
  148. {
  149. return ParameterName;
  150. }
  151. private OleDbType DbTypeToOleDbType (DbType dbType)
  152. {
  153. switch (dbType) {
  154. case DbType.AnsiString :
  155. return OleDbType.VarChar;
  156. case DbType.AnsiStringFixedLength :
  157. return OleDbType.Char;
  158. case DbType.Binary :
  159. return OleDbType.Binary;
  160. case DbType.Boolean :
  161. return OleDbType.Boolean;
  162. case DbType.Byte :
  163. return OleDbType.UnsignedTinyInt;
  164. case DbType.Currency :
  165. return OleDbType.Currency;
  166. case DbType.Date :
  167. return OleDbType.Date;
  168. case DbType.DateTime :
  169. throw new NotImplementedException ();
  170. case DbType.Decimal :
  171. return OleDbType.Decimal;
  172. case DbType.Double :
  173. return OleDbType.Double;
  174. case DbType.Guid :
  175. return OleDbType.Guid;
  176. case DbType.Int16 :
  177. return OleDbType.SmallInt;
  178. case DbType.Int32 :
  179. return OleDbType.Integer;
  180. case DbType.Int64 :
  181. return OleDbType.BigInt;
  182. case DbType.Object :
  183. return OleDbType.Variant;
  184. case DbType.SByte :
  185. return OleDbType.TinyInt;
  186. case DbType.Single :
  187. return OleDbType.Single;
  188. case DbType.String :
  189. return OleDbType.WChar;
  190. case DbType.StringFixedLength :
  191. return OleDbType.VarWChar;
  192. case DbType.Time :
  193. throw new NotImplementedException ();
  194. case DbType.UInt16 :
  195. return OleDbType.UnsignedSmallInt;
  196. case DbType.UInt32 :
  197. return OleDbType.UnsignedInt;
  198. case DbType.UInt64 :
  199. return OleDbType.UnsignedBigInt;
  200. case DbType.VarNumeric :
  201. return OleDbType.VarNumeric;
  202. }
  203. return OleDbType.Variant;
  204. }
  205. private DbType OleDbTypeToDbType (OleDbType oleDbType)
  206. {
  207. switch (oleDbType) {
  208. case OleDbType.BigInt :
  209. return DbType.Int64;
  210. case OleDbType.Binary :
  211. return DbType.Binary;
  212. case OleDbType.Boolean :
  213. return DbType.Boolean;
  214. case OleDbType.BSTR :
  215. return DbType.AnsiString;
  216. case OleDbType.Char :
  217. return DbType.AnsiStringFixedLength;
  218. case OleDbType.Currency :
  219. return DbType.Currency;
  220. case OleDbType.Date :
  221. return DbType.DateTime;
  222. case OleDbType.DBDate :
  223. return DbType.DateTime;
  224. case OleDbType.DBTime :
  225. throw new NotImplementedException ();
  226. case OleDbType.DBTimeStamp :
  227. return DbType.DateTime;
  228. case OleDbType.Decimal :
  229. return DbType.Decimal;
  230. case OleDbType.Double :
  231. return DbType.Double;
  232. case OleDbType.Empty :
  233. throw new NotImplementedException ();
  234. case OleDbType.Error :
  235. throw new NotImplementedException ();
  236. case OleDbType.Filetime :
  237. return DbType.DateTime;
  238. case OleDbType.Guid :
  239. return DbType.Guid;
  240. case OleDbType.IDispatch :
  241. return DbType.Object;
  242. case OleDbType.Integer :
  243. return DbType.Int32;
  244. case OleDbType.IUnknown :
  245. return DbType.Object;
  246. case OleDbType.LongVarBinary :
  247. return DbType.Binary;
  248. case OleDbType.LongVarChar :
  249. return DbType.AnsiString;
  250. case OleDbType.LongVarWChar :
  251. return DbType.String;
  252. case OleDbType.Numeric :
  253. return DbType.Decimal;
  254. case OleDbType.PropVariant :
  255. return DbType.Object;
  256. case OleDbType.Single :
  257. return DbType.Single;
  258. case OleDbType.SmallInt :
  259. return DbType.Int16;
  260. case OleDbType.TinyInt :
  261. return DbType.SByte;
  262. case OleDbType.UnsignedBigInt :
  263. return DbType.UInt64;
  264. case OleDbType.UnsignedInt :
  265. return DbType.UInt32;
  266. case OleDbType.UnsignedSmallInt :
  267. return DbType.UInt16;
  268. case OleDbType.UnsignedTinyInt :
  269. return DbType.Byte;
  270. case OleDbType.VarBinary :
  271. return DbType.Binary;
  272. case OleDbType.VarChar :
  273. return DbType.AnsiString;
  274. case OleDbType.Variant :
  275. return DbType.Object;
  276. case OleDbType.VarNumeric :
  277. return DbType.VarNumeric;
  278. case OleDbType.VarWChar :
  279. return DbType.StringFixedLength;
  280. case OleDbType.WChar :
  281. return DbType.String;
  282. }
  283. return DbType.Object;
  284. }
  285. private OleDbType GetOleDbType (object value)
  286. {
  287. if (value is Guid) return OleDbType.Guid;
  288. if (value is TimeSpan) return OleDbType.DBTime;
  289. switch (Type.GetTypeCode (value.GetType ())) {
  290. case TypeCode.Boolean :
  291. return OleDbType.Boolean;
  292. case TypeCode.Byte :
  293. if (value.GetType().IsArray)
  294. return OleDbType.Binary;
  295. else
  296. return OleDbType.UnsignedTinyInt;
  297. case TypeCode.Char :
  298. return OleDbType.Char;
  299. case TypeCode.DateTime :
  300. return OleDbType.Date;
  301. case TypeCode.DBNull :
  302. return OleDbType.Empty;
  303. case TypeCode.Decimal :
  304. return OleDbType.Decimal;
  305. case TypeCode.Double :
  306. return OleDbType.Double;
  307. case TypeCode.Empty :
  308. return OleDbType.Empty;
  309. case TypeCode.Int16 :
  310. return OleDbType.SmallInt;
  311. case TypeCode.Int32 :
  312. return OleDbType.Integer;
  313. case TypeCode.Int64 :
  314. return OleDbType.BigInt;
  315. case TypeCode.SByte :
  316. return OleDbType.TinyInt;
  317. case TypeCode.String :
  318. return OleDbType.VarChar;
  319. case TypeCode.Single :
  320. return OleDbType.Single;
  321. case TypeCode.UInt64 :
  322. return OleDbType.UnsignedBigInt;
  323. case TypeCode.UInt32 :
  324. return OleDbType.UnsignedInt;
  325. case TypeCode.UInt16 :
  326. return OleDbType.UnsignedSmallInt;
  327. case TypeCode.Object :
  328. return OleDbType.Variant;
  329. }
  330. return OleDbType.IUnknown;
  331. }
  332. #endregion
  333. }
  334. }