SqlConvert.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. //
  2. // System.Data.SqlClient.SqlConvert
  3. //
  4. // Author:
  5. // Boris Kirzner ([email protected])
  6. //
  7. using System;
  8. using System.Data.Common;
  9. using java.sql;
  10. namespace System.Data.SqlClient
  11. {
  12. internal sealed class SqlConvert : DbConvert
  13. {
  14. #region Methods
  15. internal static String JdbcTypeNameToDbTypeName(string jdbcTypeName)
  16. {
  17. return jdbcTypeName.Trim();
  18. }
  19. internal static SqlDbType JdbcTypeToSqlDbType(int jdbcType)
  20. {
  21. // FIXME : other java.sql.Type
  22. // Types.ARRAY
  23. if(Types.BIGINT == jdbcType) return SqlDbType.BigInt;
  24. if(Types.BINARY == jdbcType) return SqlDbType.Binary;
  25. if(Types.BIT == jdbcType) return SqlDbType.Bit;
  26. if(Types.BLOB == jdbcType) return SqlDbType.Binary;
  27. // Types.BOOLEAN
  28. if(Types.CHAR == jdbcType) return SqlDbType.Char;
  29. if(Types.CLOB == jdbcType) return SqlDbType.Binary;
  30. if(Types.DATE == jdbcType) return SqlDbType.DateTime;
  31. if(Types.DECIMAL == jdbcType) return SqlDbType.Decimal;
  32. // Types.DISTINCT
  33. if(Types.DOUBLE == jdbcType) return SqlDbType.Float;
  34. if(Types.FLOAT == jdbcType) return SqlDbType.Float;
  35. if(Types.INTEGER == jdbcType) return SqlDbType.Int;
  36. // Types.JAVA_OBJECT
  37. if(Types.LONGVARBINARY == jdbcType) return SqlDbType.Image;
  38. if(Types.LONGVARCHAR == jdbcType) return SqlDbType.Text;
  39. // Types.NULL
  40. if(Types.NUMERIC == jdbcType) return SqlDbType.Decimal;
  41. if(Types.REAL == jdbcType) return SqlDbType.Real;
  42. // Types.REF
  43. if(Types.SMALLINT == jdbcType) return SqlDbType.SmallInt;
  44. // Types.STRUCT
  45. if(Types.TIME == jdbcType) return SqlDbType.Timestamp;
  46. if(Types.TIMESTAMP == jdbcType) return SqlDbType.Timestamp;
  47. if(Types.TINYINT == jdbcType) return SqlDbType.TinyInt;
  48. if(Types.VARBINARY == jdbcType) return SqlDbType.VarBinary;
  49. if(Types.VARCHAR == jdbcType) return SqlDbType.VarChar;
  50. return SqlDbType.Variant;
  51. }
  52. internal static SqlDbType ValueTypeToSqlDbType(Type type)
  53. {
  54. if (type.Equals(typeof(byte[]))) return SqlDbType.VarBinary;
  55. if (type.Equals(typeof(bool))) return SqlDbType.Bit;
  56. // if (type.Equals(typeof(string))) return OleDbType.BSTR;
  57. // if (type.Equals(typeof(string))) return OleDbType.Char;
  58. // if (type.Equals(typeof(decimal))) return OleDbType.Currency;
  59. if (type.Equals(typeof(DateTime))) return SqlDbType.DateTime;
  60. // if (type.Equals(typeof(DateTime))) return OleDbType.DBDate;
  61. // if (type.Equals(typeof(TimeSpan))) return OleDbType.DBTime;
  62. // if (type.Equals(typeof(DateTime))) return OleDbType.DBTimeStamp;
  63. if (type.Equals(typeof(decimal))) return SqlDbType.Decimal;
  64. // if (type.Equals(typeof(int))) return OleDbType.Error;
  65. // if (type.Equals(typeof(DateTime))) return OleDbType.Filetime;
  66. if (type.Equals(typeof(Guid))) return SqlDbType.UniqueIdentifier;
  67. // if (type.Equals(typeof(short))) return OleDbType.TinyInt;
  68. if (type.Equals(typeof(short))) return SqlDbType.SmallInt;
  69. if (type.Equals(typeof(int))) return SqlDbType.Int;
  70. if (type.Equals(typeof(long))) return SqlDbType.BigInt;
  71. // if (type.Equals(typeof(object))) return OleDbType.IDispatch;
  72. // if (type.Equals(typeof(object))) return OleDbType.IUnknown;
  73. // if (type.Equals(typeof(byte[]))) return OleDbType.LongVarBinary;
  74. // if (type.Equals(typeof(string))) return OleDbType.LongVarChar;
  75. // if (type.Equals(typeof(decimal))) return OleDbType.Numeric;
  76. // if (type.Equals(typeof(object))) return OleDbType.PropVariant;
  77. if (type.Equals(typeof(float))) return SqlDbType.Float;
  78. if (type.Equals(typeof(double))) return SqlDbType.Float;
  79. if (type.Equals(typeof(byte))) return SqlDbType.TinyInt;
  80. // if (type.Equals(typeof(int))) return OleDbType.UnsignedSmallInt;
  81. // if (type.Equals(typeof(long))) return OleDbType.UnsignedInt;
  82. // if (type.Equals(typeof(decimal))) return OleDbType.UnsignedBigInt;
  83. // if (type.Equals(typeof(byte[]))) return OleDbType.VarBinary;
  84. if (type.Equals(typeof(string))) return SqlDbType.VarChar;
  85. if (type.Equals(typeof(object))) return SqlDbType.Variant;
  86. // if (type.Equals(typeof(decimal))) return OleDbType.VarNumeric;
  87. // if (type.Equals(typeof(string))) return OleDbType.WChar;
  88. // if (type.Equals(typeof(string))) return OleDbType.VarWChar;
  89. // if (type.Equals(typeof(string))) return OleDbType.LongVarWChar;
  90. return SqlDbType.Variant;
  91. }
  92. internal static Type SqlDbTypeToValueType(SqlDbType sqlDbType)
  93. {
  94. switch (sqlDbType) {
  95. case SqlDbType.BigInt : return typeof(long);
  96. case SqlDbType.Binary : return typeof(byte[]);
  97. case SqlDbType.Bit : return typeof(bool);
  98. case SqlDbType.Char : return typeof(string);
  99. case SqlDbType.DateTime : return typeof(DateTime);
  100. case SqlDbType.Decimal : return typeof(decimal);
  101. case SqlDbType.Float : return typeof(double);
  102. case SqlDbType.Image : return typeof(byte[]);
  103. case SqlDbType.Int : return typeof(int);
  104. case SqlDbType.Money : return typeof(decimal);
  105. case SqlDbType.NChar : return typeof(string);
  106. case SqlDbType.NText : return typeof(string);
  107. case SqlDbType.NVarChar : return typeof(string);
  108. case SqlDbType.Real : return typeof(Single);
  109. case SqlDbType.UniqueIdentifier : return typeof(Guid);
  110. case SqlDbType.SmallDateTime : return typeof(DateTime);
  111. case SqlDbType.SmallInt : return typeof(Int16);
  112. case SqlDbType.SmallMoney : return typeof(decimal);
  113. case SqlDbType.Text : return typeof(string);
  114. case SqlDbType.Timestamp : return typeof(byte[]);
  115. case SqlDbType.TinyInt : return typeof(byte);
  116. case SqlDbType.VarBinary : return typeof(byte[]);
  117. case SqlDbType.VarChar : return typeof(string);
  118. case SqlDbType.Variant : return typeof(object);
  119. default : throw ExceptionHelper.InvalidSqlDbType((int)sqlDbType);
  120. }
  121. }
  122. internal static SqlDbType DbTypeToSqlDbType(DbType dbType)
  123. {
  124. switch (dbType) {
  125. case DbType.AnsiString : return SqlDbType.VarChar;
  126. case DbType.Binary : return SqlDbType.VarBinary;
  127. case DbType.Byte : return SqlDbType.TinyInt;
  128. case DbType.Boolean : return SqlDbType.Bit;
  129. case DbType.Currency : return SqlDbType.Money;
  130. case DbType.DateTime : return SqlDbType.DateTime;
  131. case DbType.Decimal : return SqlDbType.Decimal;
  132. case DbType.Double : return SqlDbType.Float;
  133. case DbType.Guid : return SqlDbType.UniqueIdentifier;
  134. case DbType.Int16 : return SqlDbType.SmallInt;
  135. case DbType.Int32 : return SqlDbType.Int;
  136. case DbType.Int64 : return SqlDbType.BigInt;
  137. case DbType.Object : return SqlDbType.Variant;
  138. case DbType.SByte : throw ExceptionHelper.UnknownDataType(dbType.ToString(),"SqlDbType");
  139. case DbType.Single : return SqlDbType.Real;
  140. case DbType.String : return SqlDbType.NVarChar;
  141. case DbType.UInt16 : throw ExceptionHelper.UnknownDataType(dbType.ToString(),"SqlDbType");
  142. case DbType.UInt32 : throw ExceptionHelper.UnknownDataType(dbType.ToString(),"SqlDbType");
  143. case DbType.UInt64 : throw ExceptionHelper.UnknownDataType(dbType.ToString(),"SqlDbType");
  144. case DbType.VarNumeric : throw ExceptionHelper.UnknownDataType(dbType.ToString(),"SqlDbType");
  145. case DbType.AnsiStringFixedLength : return SqlDbType.Char;
  146. case DbType.StringFixedLength : return SqlDbType.NChar;
  147. default : throw ExceptionHelper.InvalidDbType((int)dbType);
  148. }
  149. }
  150. internal static DbType SqlDbTypeToDbType(SqlDbType sqlDbType)
  151. {
  152. switch (sqlDbType) {
  153. case SqlDbType.BigInt : return DbType.Int64;
  154. case SqlDbType.Binary : return DbType.Binary;
  155. case SqlDbType.Bit : return DbType.Boolean;
  156. case SqlDbType.Char : return DbType.AnsiStringFixedLength;
  157. case SqlDbType.DateTime : return DbType.DateTime;
  158. case SqlDbType.Decimal : return DbType.Decimal;
  159. case SqlDbType.Float : return DbType.Double;
  160. case SqlDbType.Image : return DbType.Binary;
  161. case SqlDbType.Int : return DbType.Int32;
  162. case SqlDbType.Money : return DbType.Currency;
  163. case SqlDbType.NChar : return DbType.StringFixedLength;
  164. case SqlDbType.NText : return DbType.String;
  165. case SqlDbType.NVarChar : return DbType.String;
  166. case SqlDbType.Real : return DbType.Single;
  167. case SqlDbType.UniqueIdentifier : return DbType.Guid;
  168. case SqlDbType.SmallDateTime : return DbType.DateTime;
  169. case SqlDbType.SmallInt : return DbType.Int16;
  170. case SqlDbType.SmallMoney : return DbType.Currency;
  171. case SqlDbType.Text : return DbType.AnsiString;
  172. case SqlDbType.Timestamp : return DbType.Binary;
  173. case SqlDbType.TinyInt : return DbType.Byte;
  174. case SqlDbType.VarBinary : return DbType.Binary;
  175. case SqlDbType.VarChar : return DbType.AnsiString;
  176. case SqlDbType.Variant : return DbType.Object;
  177. default : throw ExceptionHelper.InvalidSqlDbType((int)sqlDbType);
  178. }
  179. }
  180. internal static int SqlDbTypeToJdbcType(SqlDbType sqlDbType)
  181. {
  182. switch(sqlDbType) {
  183. case SqlDbType.BigInt : return Types.BIGINT;
  184. case SqlDbType.Binary : return Types.BINARY;
  185. case SqlDbType.Bit : return Types.BIT;
  186. case SqlDbType.Char : return Types.CHAR;
  187. case SqlDbType.DateTime : return Types.DATE;
  188. case SqlDbType.Decimal : return Types.DECIMAL;
  189. case SqlDbType.Float : return Types.FLOAT;
  190. case SqlDbType.Image : return Types.LONGVARBINARY;
  191. case SqlDbType.Int : return Types.INTEGER;
  192. case SqlDbType.Money : return Types.DECIMAL;
  193. case SqlDbType.NChar : return Types.CHAR;
  194. case SqlDbType.NText : return Types.LONGVARCHAR;
  195. case SqlDbType.NVarChar : return Types.VARCHAR;
  196. case SqlDbType.Real : return Types.REAL;
  197. case SqlDbType.UniqueIdentifier : return Types.CHAR;
  198. case SqlDbType.SmallDateTime : return Types.DATE;
  199. case SqlDbType.SmallInt : return Types.SMALLINT;
  200. case SqlDbType.SmallMoney : return Types.DECIMAL;
  201. case SqlDbType.Text : return Types.LONGVARCHAR;
  202. case SqlDbType.Timestamp : return Types.TIMESTAMP;
  203. case SqlDbType.TinyInt : return Types.TINYINT;
  204. case SqlDbType.VarBinary : return Types.VARBINARY;
  205. case SqlDbType.VarChar : return Types.VARCHAR;
  206. case SqlDbType.Variant : return Types.VARCHAR; // note : ms jdbc driver recognize this sqlserver as varchar
  207. default : throw ExceptionHelper.InvalidSqlDbType((int)sqlDbType);
  208. }
  209. }
  210. #endregion // Methods
  211. }
  212. }