OleDbParameter.cs 8.3 KB

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