OciParameterDescriptor.cs 6.4 KB

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