2 // System.Data.SqlClient.SqlConvert
\r
6 // Konstantin Triger <kostat@mainsoft.com>
\r
7 // Boris Kirzner <borisk@mainsoft.com>
\r
9 // (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
\r
13 // Permission is hereby granted, free of charge, to any person obtaining
\r
14 // a copy of this software and associated documentation files (the
\r
15 // "Software"), to deal in the Software without restriction, including
\r
16 // without limitation the rights to use, copy, modify, merge, publish,
\r
17 // distribute, sublicense, and/or sell copies of the Software, and to
\r
18 // permit persons to whom the Software is furnished to do so, subject to
\r
19 // the following conditions:
\r
21 // The above copyright notice and this permission notice shall be
\r
22 // included in all copies or substantial portions of the Software.
\r
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
\r
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
\r
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
\r
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
\r
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
\r
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
\r
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\r
34 using System.Data.Common;
\r
35 using System.Data.ProviderBase;
\r
39 namespace System.Data.SqlClient
\r
41 internal sealed class SqlConvert : DbConvert
\r
45 internal static String JdbcTypeNameToDbTypeName(string jdbcTypeName)
\r
47 return jdbcTypeName.Trim();
\r
50 internal static SqlDbType JdbcTypeToSqlDbType(int jdbcType)
\r
52 // FIXME : other java.sql.Type
\r
54 if(Types.BIGINT == jdbcType) return SqlDbType.BigInt;
\r
55 if(Types.BINARY == jdbcType) return SqlDbType.Binary;
\r
56 if(Types.BIT == jdbcType) return SqlDbType.Bit;
\r
57 if(Types.BLOB == jdbcType) return SqlDbType.Binary;
\r
59 if(Types.CHAR == jdbcType) return SqlDbType.Char;
\r
60 if(Types.CLOB == jdbcType) return SqlDbType.Binary;
\r
61 if(Types.DATE == jdbcType) return SqlDbType.DateTime;
\r
62 if(Types.DECIMAL == jdbcType) return SqlDbType.Decimal;
\r
64 if(Types.DOUBLE == jdbcType) return SqlDbType.Float;
\r
65 if(Types.FLOAT == jdbcType) return SqlDbType.Float;
\r
66 if(Types.INTEGER == jdbcType) return SqlDbType.Int;
\r
67 // Types.JAVA_OBJECT
\r
68 if(Types.LONGVARBINARY == jdbcType) return SqlDbType.Image;
\r
69 if(Types.LONGVARCHAR == jdbcType) return SqlDbType.Text;
\r
71 if(Types.NUMERIC == jdbcType) return SqlDbType.Decimal;
\r
72 if(Types.REAL == jdbcType) return SqlDbType.Real;
\r
74 if(Types.SMALLINT == jdbcType) return SqlDbType.SmallInt;
\r
76 if(Types.TIME == jdbcType) return SqlDbType.DateTime;
\r
77 if(Types.TIMESTAMP == jdbcType) return SqlDbType.DateTime;
\r
78 if(Types.TINYINT == jdbcType) return SqlDbType.TinyInt;
\r
79 if(Types.VARBINARY == jdbcType) return SqlDbType.VarBinary;
\r
80 if(Types.VARCHAR == jdbcType) return SqlDbType.NVarChar;
\r
81 return SqlDbType.Variant;
\r
84 internal static SqlDbType ValueTypeToSqlDbType(Type type)
\r
86 switch (Type.GetTypeCode(type)) {
\r
87 case TypeCode.Boolean: return SqlDbType.Bit;
\r
88 case TypeCode.Byte: return SqlDbType.TinyInt;
\r
89 case TypeCode.Char: return SqlDbType.Char;
\r
90 case TypeCode.DateTime: return SqlDbType.DateTime;
\r
91 case TypeCode.DBNull: return SqlDbType.Variant;
\r
92 case TypeCode.Decimal: return SqlDbType.Decimal;
\r
93 case TypeCode.Double: return SqlDbType.Float;
\r
94 case TypeCode.Empty: return SqlDbType.Variant;
\r
95 case TypeCode.Int16: return SqlDbType.SmallInt;
\r
96 case TypeCode.Int32: return SqlDbType.Int;
\r
97 case TypeCode.Int64: return SqlDbType.BigInt;
\r
99 case TypeCode.Object: {
\r
100 if (type.Equals(DbTypes.TypeOfByteArray)) return SqlDbType.VarBinary;
\r
101 //if (type.Equals(DbTypes.TypeOfTimespan)) return OleDbType.DBTime;
\r
102 if (type.Equals(DbTypes.TypeOfGuid)) return SqlDbType.UniqueIdentifier;
\r
105 return ValueTypeToSqlDbType (Enum.GetUnderlyingType (type));
\r
107 return SqlDbType.Variant;
\r
109 case TypeCode.SByte: return SqlDbType.TinyInt;
\r
110 case TypeCode.Single: return SqlDbType.Float;
\r
111 case TypeCode.String: return SqlDbType.NVarChar;
\r
112 case TypeCode.UInt16: return SqlDbType.SmallInt;
\r
113 case TypeCode.UInt32: return SqlDbType.Int;
\r
114 case TypeCode.UInt64: return SqlDbType.BigInt;
\r
118 internal static Type SqlDbTypeToValueType(SqlDbType sqlDbType)
\r
120 switch (sqlDbType) {
\r
121 case SqlDbType.BigInt : return typeof(long);
\r
122 case SqlDbType.Binary : return typeof(byte[]);
\r
123 case SqlDbType.Bit : return typeof(bool);
\r
124 case SqlDbType.Char : return typeof(string);
\r
125 case SqlDbType.DateTime : return typeof(DateTime);
\r
126 case SqlDbType.Decimal : return typeof(decimal);
\r
127 case SqlDbType.Float : return typeof(double);
\r
128 case SqlDbType.Image : return typeof(byte[]);
\r
129 case SqlDbType.Int : return typeof(int);
\r
130 case SqlDbType.Money : return typeof(decimal);
\r
131 case SqlDbType.NChar : return typeof(string);
\r
132 case SqlDbType.NText : return typeof(string);
\r
133 case SqlDbType.NVarChar : return typeof(string);
\r
134 case SqlDbType.Real : return typeof(Single);
\r
135 case SqlDbType.UniqueIdentifier : return typeof(Guid);
\r
136 case SqlDbType.SmallDateTime : return typeof(DateTime);
\r
137 case SqlDbType.SmallInt : return typeof(Int16);
\r
138 case SqlDbType.SmallMoney : return typeof(decimal);
\r
139 case SqlDbType.Text : return typeof(string);
\r
140 case SqlDbType.Timestamp : return typeof(byte[]);
\r
141 case SqlDbType.TinyInt : return typeof(byte);
\r
142 case SqlDbType.VarBinary : return typeof(byte[]);
\r
143 case SqlDbType.VarChar : return typeof(string);
\r
144 case SqlDbType.Variant : return typeof(object);
\r
145 default : throw ExceptionHelper.InvalidSqlDbType((int)sqlDbType);
\r
149 internal static SqlDbType DbTypeToSqlDbType(DbType dbType)
\r
152 case DbType.AnsiString : return SqlDbType.VarChar;
\r
153 case DbType.Binary : return SqlDbType.VarBinary;
\r
154 case DbType.Byte : return SqlDbType.TinyInt;
\r
155 case DbType.Boolean : return SqlDbType.Bit;
\r
156 case DbType.Currency : return SqlDbType.Money;
\r
157 case DbType.Date : return SqlDbType.DateTime;
\r
158 case DbType.DateTime : return SqlDbType.DateTime;
\r
159 case DbType.Decimal : return SqlDbType.Decimal;
\r
160 case DbType.Double : return SqlDbType.Float;
\r
161 case DbType.Guid : return SqlDbType.UniqueIdentifier;
\r
162 case DbType.Int16 : return SqlDbType.SmallInt;
\r
163 case DbType.Int32 : return SqlDbType.Int;
\r
164 case DbType.Int64 : return SqlDbType.BigInt;
\r
165 case DbType.Object : return SqlDbType.Variant;
\r
166 case DbType.SByte : throw ExceptionHelper.UnknownDataType(dbType.ToString(),"SqlDbType");
\r
167 case DbType.Single : return SqlDbType.Real;
\r
168 case DbType.String : return SqlDbType.NVarChar;
\r
169 case DbType.UInt16 : throw ExceptionHelper.UnknownDataType(dbType.ToString(),"SqlDbType");
\r
170 case DbType.UInt32 : throw ExceptionHelper.UnknownDataType(dbType.ToString(),"SqlDbType");
\r
171 case DbType.UInt64 : throw ExceptionHelper.UnknownDataType(dbType.ToString(),"SqlDbType");
\r
172 case DbType.VarNumeric : throw ExceptionHelper.UnknownDataType(dbType.ToString(),"SqlDbType");
\r
173 case DbType.AnsiStringFixedLength : return SqlDbType.Char;
\r
174 case DbType.StringFixedLength : return SqlDbType.NChar;
\r
175 default : throw ExceptionHelper.InvalidDbType((int)dbType);
\r
179 internal static DbType SqlDbTypeToDbType(SqlDbType sqlDbType)
\r
181 switch (sqlDbType) {
\r
182 case SqlDbType.BigInt : return DbType.Int64;
\r
183 case SqlDbType.Binary : return DbType.Binary;
\r
184 case SqlDbType.Bit : return DbType.Boolean;
\r
185 case SqlDbType.Char : return DbType.AnsiStringFixedLength;
\r
186 case SqlDbType.DateTime : return DbType.DateTime;
\r
187 case SqlDbType.Decimal : return DbType.Decimal;
\r
188 case SqlDbType.Float : return DbType.Double;
\r
189 case SqlDbType.Image : return DbType.Binary;
\r
190 case SqlDbType.Int : return DbType.Int32;
\r
191 case SqlDbType.Money : return DbType.Currency;
\r
192 case SqlDbType.NChar : return DbType.StringFixedLength;
\r
193 case SqlDbType.NText : return DbType.String;
\r
194 case SqlDbType.NVarChar : return DbType.String;
\r
195 case SqlDbType.Real : return DbType.Single;
\r
196 case SqlDbType.UniqueIdentifier : return DbType.Guid;
\r
197 case SqlDbType.SmallDateTime : return DbType.DateTime;
\r
198 case SqlDbType.SmallInt : return DbType.Int16;
\r
199 case SqlDbType.SmallMoney : return DbType.Currency;
\r
200 case SqlDbType.Text : return DbType.AnsiString;
\r
201 case SqlDbType.Timestamp : return DbType.Binary;
\r
202 case SqlDbType.TinyInt : return DbType.Byte;
\r
203 case SqlDbType.VarBinary : return DbType.Binary;
\r
204 case SqlDbType.VarChar : return DbType.AnsiString;
\r
205 case SqlDbType.Variant : return DbType.Object;
\r
206 default : throw ExceptionHelper.InvalidSqlDbType((int)sqlDbType);
\r
210 internal static int SqlDbTypeToJdbcType(SqlDbType sqlDbType)
\r
212 switch(sqlDbType) {
\r
213 case SqlDbType.BigInt : return Types.BIGINT;
\r
214 case SqlDbType.Binary : return Types.BINARY;
\r
215 case SqlDbType.Bit : return Types.BIT;
\r
216 case SqlDbType.Char : return Types.CHAR;
\r
217 case SqlDbType.DateTime : return Types.TIMESTAMP;
\r
218 case SqlDbType.Decimal : return Types.DECIMAL;
\r
219 case SqlDbType.Float : return Types.FLOAT;
\r
220 case SqlDbType.Image : return Types.LONGVARBINARY;
\r
221 case SqlDbType.Int : return Types.INTEGER;
\r
222 case SqlDbType.Money : return Types.DECIMAL;
\r
223 case SqlDbType.NChar : return Types.CHAR;
\r
224 case SqlDbType.NText : return Types.LONGVARCHAR;
\r
225 case SqlDbType.NVarChar : return Types.VARCHAR;
\r
226 case SqlDbType.Real : return Types.REAL;
\r
227 case SqlDbType.UniqueIdentifier : return Types.CHAR;
\r
228 case SqlDbType.SmallDateTime : return Types.DATE;
\r
229 case SqlDbType.SmallInt : return Types.SMALLINT;
\r
230 case SqlDbType.SmallMoney : return Types.DECIMAL;
\r
231 case SqlDbType.Text : return Types.LONGVARCHAR;
\r
232 case SqlDbType.Timestamp : return Types.TIMESTAMP;
\r
233 case SqlDbType.TinyInt : return Types.TINYINT;
\r
234 case SqlDbType.VarBinary : return Types.VARBINARY;
\r
235 case SqlDbType.VarChar : return Types.VARCHAR;
\r
236 case SqlDbType.Variant : return Types.VARCHAR; // note : ms jdbc driver recognize this sqlserver as varchar
\r
237 default : throw ExceptionHelper.InvalidSqlDbType((int)sqlDbType);
\r
241 #endregion // Methods
\r