OciParameterDescriptor.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. //
  2. // OciParameterDescriptor.cs
  3. //
  4. // Part of managed C#/.NET library System.Data.OracleClient.dll
  5. //
  6. // Part of the Mono class libraries at
  7. // mcs/class/System.Data.OracleClient/System.Data.OracleClient.Oci
  8. //
  9. // Assembly: System.Data.OracleClient.dll
  10. // Namespace: System.Data.OracleClient.Oci
  11. //
  12. // Author:
  13. // Tim Coleman <[email protected]>
  14. // Daniel Morgan <[email protected]>
  15. //
  16. // Copyright (C) Tim Coleman, 2003
  17. // Copyright (C) Daniel Morgan, 2005
  18. //
  19. using System;
  20. using System.Data.OracleClient;
  21. using System.Runtime.InteropServices;
  22. namespace System.Data.OracleClient.Oci {
  23. internal sealed class OciParameterDescriptor : OciDescriptorHandle
  24. {
  25. #region Fields
  26. OciErrorHandle errorHandle;
  27. //OciServiceHandle service;
  28. //OciDataType type;
  29. #endregion // Fields
  30. #region Constructors
  31. public OciParameterDescriptor (OciHandle parent, IntPtr handle)
  32. : base (OciHandleType.Parameter, parent, handle)
  33. {
  34. }
  35. #endregion // Constructors
  36. #region Properties
  37. public OciErrorHandle ErrorHandle {
  38. get { return errorHandle; }
  39. set { errorHandle = value; }
  40. }
  41. #endregion // Properties
  42. #region Methods
  43. public string GetName ()
  44. {
  45. return GetAttributeString (OciAttributeType.Name, ErrorHandle);
  46. }
  47. public int GetDataSize ()
  48. {
  49. return (int) GetAttributeUInt16 (OciAttributeType.DataSize, ErrorHandle);
  50. }
  51. public OciDataType GetDataType ()
  52. {
  53. return (OciDataType) GetAttributeUInt16 (OciAttributeType.DataType, ErrorHandle);
  54. }
  55. public static OracleType OciDataTypeToOracleType (OciDataType ociType)
  56. {
  57. Console.WriteLine ("OciDataType = {0}", ociType);
  58. switch (ociType) {
  59. case OciDataType.VarChar2:
  60. return OracleType.VarChar;
  61. case OciDataType.Number:
  62. return OracleType.Number;
  63. case OciDataType.Integer:
  64. return OracleType.UInt32;
  65. case OciDataType.Float:
  66. return OracleType.Float;
  67. case OciDataType.String:
  68. return OracleType.VarChar;
  69. case OciDataType.VarNum:
  70. return OracleType.Number;
  71. case OciDataType.Long:
  72. return OracleType.LongVarChar;
  73. case OciDataType.VarChar:
  74. return OracleType.VarChar;
  75. case OciDataType.RowId:
  76. return OracleType.RowId;
  77. case OciDataType.Date:
  78. return OracleType.DateTime;
  79. case OciDataType.VarRaw:
  80. return OracleType.Raw;
  81. case OciDataType.Raw:
  82. return OracleType.Raw;
  83. case OciDataType.LongRaw:
  84. return OracleType.Raw;
  85. case OciDataType.UnsignedInt:
  86. return OracleType.UInt32;
  87. case OciDataType.LongVarChar:
  88. return OracleType.LongVarChar;
  89. case OciDataType.LongVarRaw:
  90. return OracleType.Raw;
  91. case OciDataType.Char:
  92. return OracleType.Char;
  93. case OciDataType.CharZ:
  94. return OracleType.Char;
  95. case OciDataType.RowIdDescriptor:
  96. return OracleType.RowId;
  97. //case OciDataType.NamedDataType:
  98. // return ???
  99. //case OciDataType.Ref:
  100. // return ???
  101. case OciDataType.Clob:
  102. return OracleType.Clob;
  103. case OciDataType.Blob:
  104. return OracleType.Blob;
  105. case OciDataType.BFile:
  106. return OracleType.BFile;
  107. case OciDataType.OciString:
  108. return OracleType.VarChar;
  109. case OciDataType.OciDate:
  110. return OracleType.DateTime;
  111. case OciDataType.TimeStamp:
  112. return OracleType.Timestamp;
  113. case OciDataType.IntervalDayToSecond:
  114. return OracleType.IntervalDayToSecond;
  115. case OciDataType.IntervalYearToMonth:
  116. return OracleType.IntervalYearToMonth;
  117. default:
  118. throw new NotImplementedException ();
  119. }
  120. }
  121. public Type GetFieldType (string sDataTypeName)
  122. {
  123. switch (sDataTypeName) {
  124. case "VarChar2":
  125. return typeof (System.String);
  126. case "Number":
  127. return typeof (System.Decimal);
  128. case "Integer":
  129. return typeof (System.Int32);
  130. case "Float":
  131. return typeof (System.Decimal);
  132. case "String":
  133. return typeof (System.String);
  134. case "VarNum":
  135. return typeof (System.Decimal);
  136. case "Long":
  137. return typeof (System.String);
  138. case "VarChar":
  139. return typeof (System.String);
  140. case "RowId":
  141. return typeof (System.String);
  142. case "Date":
  143. return typeof (System.DateTime);
  144. case "VarRaw":
  145. return typeof (byte[]);
  146. case "Raw":
  147. return typeof (byte[]);
  148. case "LongRaw":
  149. return typeof (byte[]);
  150. case "UnsignedInt":
  151. return typeof (System.UInt32);
  152. case "LongVarChar":
  153. return typeof (System.String);
  154. case "LongVarRaw":
  155. return typeof (byte[]);
  156. case "Char":
  157. return typeof (System.String);
  158. case "CharZ":
  159. return typeof (System.String);
  160. case "RowIdDescriptor":
  161. return typeof (System.String);
  162. case "NamedDataType":
  163. return typeof (System.String);
  164. case "Ref":
  165. return typeof (System.String);
  166. case "Clob":
  167. return typeof (System.String);
  168. case "Blob":
  169. return typeof (byte[]);
  170. case "BFile":
  171. return typeof (byte[]);
  172. case "OciString":
  173. return typeof (System.String);
  174. case "OciDate":
  175. return typeof (System.DateTime);
  176. case "TimeStamp":
  177. return typeof (System.DateTime);
  178. default:
  179. // FIXME: are these types correct?
  180. return typeof(System.String);
  181. }
  182. }
  183. public string GetDataTypeName ()
  184. {
  185. switch(GetDataType())
  186. {
  187. case OciDataType.VarChar2:
  188. return "VarChar2";
  189. case OciDataType.Number:
  190. return "Number";
  191. case OciDataType.Integer:
  192. return "Integer";
  193. case OciDataType.Float:
  194. return "Float";
  195. case OciDataType.String:
  196. return "String";
  197. case OciDataType.VarNum:
  198. return "VarNum";
  199. case OciDataType.Long:
  200. return "Long";
  201. case OciDataType.VarChar:
  202. return "VarChar";
  203. case OciDataType.RowId:
  204. return "RowId";
  205. case OciDataType.Date:
  206. return "Date";
  207. case OciDataType.VarRaw:
  208. return "VarRaw";
  209. case OciDataType.Raw:
  210. return "Raw";
  211. case OciDataType.LongRaw:
  212. return "LongRaw";
  213. case OciDataType.UnsignedInt:
  214. return "UnsignedInt";
  215. case OciDataType.LongVarChar:
  216. return "LongVarChar";
  217. case OciDataType.LongVarRaw:
  218. return "LongVarRaw";
  219. case OciDataType.Char:
  220. return "Char";
  221. case OciDataType.CharZ:
  222. return "CharZ";
  223. case OciDataType.RowIdDescriptor:
  224. return "RowIdDescriptor";
  225. case OciDataType.NamedDataType:
  226. return "NamedDataType";
  227. case OciDataType.Ref:
  228. return "Ref";
  229. case OciDataType.Clob:
  230. return "Clob";
  231. case OciDataType.Blob:
  232. return "Blob";
  233. case OciDataType.BFile:
  234. return "BFile";
  235. case OciDataType.OciString:
  236. return "OciString";
  237. case OciDataType.OciDate:
  238. return "OciDate";
  239. case OciDataType.TimeStamp:
  240. return "TimeStamp";
  241. default:
  242. return "Unknown";
  243. }
  244. }
  245. public short GetPrecision ()
  246. {
  247. return (short) GetAttributeByte (OciAttributeType.Precision, ErrorHandle);
  248. }
  249. public short GetScale ()
  250. {
  251. return (short) GetAttributeSByte (OciAttributeType.Scale, ErrorHandle);
  252. }
  253. public bool GetIsNull ()
  254. {
  255. return GetAttributeBool (OciAttributeType.IsNull, ErrorHandle);
  256. }
  257. #endregion // Methods
  258. }
  259. }