In corlib/System.Runtime.InteropServices:
[mono.git] / mcs / class / FirebirdSql.Data.Firebird / FirebirdSql.Data.Common / TypeHelper.cs
index 42949b1c8c0f96266df30aa29e541d219207abb6..d0ebf1c241ae5a8860e5816ea1b960840feb2ec3 100644 (file)
-/*\r
- *     Firebird ADO.NET Data provider for .NET and     Mono \r
- * \r
- *        The contents of this file are subject to the Initial \r
- *        Developer's Public License Version 1.0 (the "License"); \r
- *        you may not use this file except in compliance with the \r
- *        License. You may obtain a copy of the License at \r
- *        http://www.firebirdsql.org/index.php?op=doc&id=idpl\r
- *\r
- *        Software distributed under the License is distributed on \r
- *        an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either \r
- *        express or implied. See the License for the specific \r
- *        language governing rights and limitations under the License.\r
- * \r
- *     Copyright (c) 2002, 2005 Carlos Guzman Alvarez\r
- *     All Rights Reserved.\r
- */\r
-\r
-using System;\r
-using System.Data;\r
-\r
-namespace FirebirdSql.Data.Common\r
-{\r
-       internal sealed class TypeHelper\r
-       {\r
-               #region Constructors\r
-\r
-               private TypeHelper()\r
-               {\r
-               }\r
-\r
-               #endregion\r
-\r
-               #region Static Methods\r
-\r
-               public static short GetSize(DbDataType dataType)\r
-               {\r
-                       switch (dataType)\r
-                       {\r
-                               case DbDataType.Array:\r
-                               case DbDataType.Binary:\r
-                               case DbDataType.Text:\r
-                                       return 8;\r
-\r
-                               case DbDataType.SmallInt:\r
-                                       return 2;\r
-\r
-                               case DbDataType.Integer:\r
-                               case DbDataType.Float:\r
-                               case DbDataType.Date:\r
-                               case DbDataType.Time:\r
-                                       return 4;\r
-\r
-                               case DbDataType.BigInt:\r
-                               case DbDataType.Double:\r
-                               case DbDataType.TimeStamp:\r
-                                       return 8;\r
-\r
-                               case DbDataType.Guid:\r
-                                       return 16;\r
-\r
-                               default:\r
-                                       return 0;\r
-                       }\r
-               }\r
-\r
-               public static int GetFbType(DbDataType dataType, bool isNullable)\r
-               {\r
-                       int sqltype = 0;\r
-\r
-                       switch (dataType)\r
-                       {\r
-                               case DbDataType.Array:\r
-                                       sqltype = IscCodes.SQL_ARRAY;\r
-                                       break;\r
-\r
-                               case DbDataType.Binary:\r
-                               case DbDataType.Text:\r
-                                       sqltype = IscCodes.SQL_BLOB;\r
-                                       break;\r
-\r
-                               case DbDataType.Char:\r
-                                       sqltype = IscCodes.SQL_TEXT;\r
-                                       break;\r
-\r
-                               case DbDataType.VarChar:\r
-                                       sqltype = IscCodes.SQL_VARYING;\r
-                                       break;\r
-\r
-                               case DbDataType.SmallInt:\r
-                                       sqltype = IscCodes.SQL_SHORT;\r
-                                       break;\r
-\r
-                               case DbDataType.Integer:\r
-                                       sqltype = IscCodes.SQL_LONG;\r
-                                       break;\r
-\r
-                               case DbDataType.BigInt:\r
-                                       sqltype = IscCodes.SQL_INT64;\r
-                                       break;\r
-\r
-                               case DbDataType.Float:\r
-                                       sqltype = IscCodes.SQL_FLOAT;\r
-                                       break;\r
-\r
-                               case DbDataType.Guid:\r
-                                       sqltype = IscCodes.SQL_TEXT;\r
-                                       break;\r
-\r
-                               case DbDataType.Double:\r
-                                       sqltype = IscCodes.SQL_DOUBLE;\r
-                                       break;\r
-\r
-                               case DbDataType.Date:\r
-                                       sqltype = IscCodes.SQL_TYPE_DATE;\r
-                                       break;\r
-\r
-                               case DbDataType.Time:\r
-                                       sqltype = IscCodes.SQL_TYPE_TIME;\r
-                                       break;\r
-\r
-                               case DbDataType.TimeStamp:\r
-                                       sqltype = IscCodes.SQL_TIMESTAMP;\r
-                                       break;\r
-\r
-                               default:\r
-                                       throw new ArgumentException("Invalid data type");\r
-                       }\r
-\r
-                       if (isNullable)\r
-                       {\r
-                               sqltype++;\r
-                       }\r
-\r
-                       return sqltype;\r
-               }\r
-\r
-               public static int GetFbType(int blrType)\r
-               {\r
-                       switch (blrType)\r
-                       {\r
-                               case IscCodes.blr_varying:\r
-                               case IscCodes.blr_varying2:\r
-                                       return IscCodes.SQL_VARYING;\r
-\r
-                               case IscCodes.blr_text:\r
-                               case IscCodes.blr_text2:\r
-                               case IscCodes.blr_cstring:\r
-                               case IscCodes.blr_cstring2:\r
-                                       return IscCodes.SQL_TEXT;\r
-\r
-                               case IscCodes.blr_short:\r
-                                       return IscCodes.SQL_SHORT;\r
-\r
-                               case IscCodes.blr_long:\r
-                                       return IscCodes.SQL_LONG;\r
-\r
-                               case IscCodes.blr_quad:\r
-                                       return IscCodes.SQL_QUAD;\r
-\r
-                               case IscCodes.blr_int64:\r
-                               case IscCodes.blr_blob_id:\r
-                                       return IscCodes.SQL_INT64;\r
-\r
-                               case IscCodes.blr_double:\r
-                                       return IscCodes.SQL_DOUBLE;\r
-\r
-                               case IscCodes.blr_d_float:\r
-                                       return IscCodes.SQL_D_FLOAT;\r
-\r
-                               case IscCodes.blr_float:\r
-                                       return IscCodes.SQL_FLOAT;\r
-\r
-                               case IscCodes.blr_sql_date:\r
-                                       return IscCodes.SQL_TYPE_DATE;\r
-\r
-                               case IscCodes.blr_sql_time:\r
-                                       return IscCodes.SQL_TYPE_TIME;\r
-\r
-                               case IscCodes.blr_timestamp:\r
-                                       return IscCodes.SQL_TIMESTAMP;\r
-\r
-                               case IscCodes.blr_blob:\r
-                                       return IscCodes.SQL_BLOB;\r
-\r
-                               default:\r
-                                       throw new ArgumentException("Invalid data type");\r
-                       }\r
-               }\r
-\r
-               public static DbDataType GetDbDataType(int blrType, int subType, int scale)\r
-               {\r
-                       switch (blrType)\r
-                       {\r
-                               case IscCodes.blr_varying:\r
-                               case IscCodes.blr_varying2:\r
-                                       return DbDataType.VarChar;\r
-\r
-                               case IscCodes.blr_text:\r
-                               case IscCodes.blr_text2:\r
-                                       return DbDataType.Char;\r
-\r
-                               case IscCodes.blr_cstring:\r
-                               case IscCodes.blr_cstring2:\r
-                                       return DbDataType.Text;\r
-\r
-                               case IscCodes.blr_short:\r
-                    if (subType == 2)\r
-                    {\r
-                        return DbDataType.Decimal;\r
-                    }\r
-                    else if (subType == 1)\r
-                    {\r
-                        return DbDataType.Numeric;\r
-                    }\r
-                                       else\r
-                                       {\r
-                                               return DbDataType.SmallInt;\r
-                                       }\r
-\r
-                               case IscCodes.blr_long:\r
-                    if (subType == 2)\r
-                    {\r
-                        return DbDataType.Decimal;\r
-                    }\r
-                    else if (subType == 1)\r
-                    {\r
-                        return DbDataType.Numeric;\r
-                    }\r
-                                       else\r
-                                       {\r
-                                               return DbDataType.Integer;\r
-                                       }\r
-\r
-                               case IscCodes.blr_quad:\r
-                               case IscCodes.blr_int64:\r
-                               case IscCodes.blr_blob_id:\r
-                    if (subType == 2)\r
-                    {\r
-                        return DbDataType.Decimal;\r
-                    }\r
-                    else if (subType == 1)\r
-                    {\r
-                        return DbDataType.Numeric;\r
-                    }\r
-                                       else\r
-                                       {\r
-                                               return DbDataType.BigInt;\r
-                                       }\r
-\r
-                               case IscCodes.blr_double:\r
-                               case IscCodes.blr_d_float:\r
-                                       return DbDataType.Double;\r
-\r
-                               case IscCodes.blr_float:\r
-                                       return DbDataType.Float;\r
-\r
-                               case IscCodes.blr_sql_date:\r
-                                       return DbDataType.Date;\r
-\r
-                               case IscCodes.blr_sql_time:\r
-                                       return DbDataType.Time;\r
-\r
-                               case IscCodes.blr_timestamp:\r
-                                       return DbDataType.TimeStamp;\r
-\r
-                               case IscCodes.blr_blob:\r
-                                       if (subType == 1)\r
-                                       {\r
-                                               return DbDataType.Text;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               return DbDataType.Binary;\r
-                                       }\r
-\r
-                               default:\r
-                                       throw new ArgumentException("Invalid data type");\r
-                       }\r
-               }\r
-\r
-               public static string GetDataTypeName(DbDataType dataType)\r
-               {\r
-                       switch (dataType)\r
-                       {\r
-                               case DbDataType.Array:\r
-                                       return "ARRAY";\r
-\r
-                               case DbDataType.Binary:\r
-                                       return "BLOB";\r
-\r
-                               case DbDataType.Text:\r
-                                       return "BLOB SUB_TYPE 1";\r
-\r
-                               case DbDataType.Char:\r
-                               case DbDataType.Guid:\r
-                                       return "CHAR";\r
-\r
-                               case DbDataType.VarChar:\r
-                                       return "VARCHAR";\r
-\r
-                               case DbDataType.SmallInt:\r
-                                       return "SMALLINT";\r
-\r
-                               case DbDataType.Integer:\r
-                                       return "INTEGER";\r
-\r
-                               case DbDataType.Float:\r
-                                       return "FLOAT";\r
-\r
-                               case DbDataType.Double:\r
-                                       return "DOUBLE PRECISION";\r
-\r
-                               case DbDataType.BigInt:\r
-                                       return "BIGINT";\r
-\r
-                               case DbDataType.Numeric:\r
-                                       return "NUMERIC";\r
-\r
-                               case DbDataType.Decimal:\r
-                                       return "DECIMAL";\r
-\r
-                               case DbDataType.Date:\r
-                                       return "DATE";\r
-\r
-                               case DbDataType.Time:\r
-                                       return "TIME";\r
-\r
-                               case DbDataType.TimeStamp:\r
-                                       return "TIMESTAMP";\r
-\r
-                               default:\r
-                                       return null;\r
-                       }\r
-               }\r
-\r
-               public static DbType GetDbType(DbDataType type)\r
-               {\r
-                       switch (type)\r
-                       {\r
-                               case DbDataType.Array:\r
-                               case DbDataType.Binary:\r
-                                       return DbType.Binary;\r
-\r
-                               case DbDataType.Text:\r
-                               case DbDataType.VarChar:\r
-                               case DbDataType.Char:\r
-                                       return DbType.String;\r
-\r
-                               case DbDataType.SmallInt:\r
-                                       return DbType.Int16;\r
-\r
-                               case DbDataType.Integer:\r
-                                       return DbType.Int32;\r
-\r
-                               case DbDataType.BigInt:\r
-                                       return DbType.Int64;\r
-\r
-                               case DbDataType.Date:\r
-                                       return DbType.Date;\r
-\r
-                               case DbDataType.Time:\r
-                                       return DbType.Time;\r
-\r
-                               case DbDataType.TimeStamp:\r
-                                       return DbType.DateTime;\r
-\r
-                               case DbDataType.Numeric:\r
-                               case DbDataType.Decimal:\r
-                                       return DbType.Decimal;\r
-\r
-                               case DbDataType.Float:\r
-                                       return DbType.Single;\r
-\r
-                               case DbDataType.Double:\r
-                                       return DbType.Double;\r
-\r
-                               case DbDataType.Guid:\r
-                                       return DbType.Guid;\r
-\r
-                               default:\r
-                                       throw new ArgumentException("Invalid data type");\r
-                       }\r
-               }\r
-\r
-               public static DbDataType GetDbDataType(DbType dbType)\r
-               {\r
-                       switch (dbType)\r
-                       {\r
-                               case DbType.String:\r
-                               case DbType.AnsiString:\r
-                                       return DbDataType.VarChar;\r
-\r
-                               case DbType.StringFixedLength:\r
-                               case DbType.AnsiStringFixedLength:\r
-                                       return DbDataType.Char;\r
-\r
-                               case DbType.Boolean:\r
-                               case DbType.Byte:\r
-                               case DbType.SByte:\r
-                               case DbType.Int16:\r
-                               case DbType.UInt16:\r
-                                       return DbDataType.SmallInt;\r
-\r
-                               case DbType.Int32:\r
-                               case DbType.UInt32:\r
-                                       return DbDataType.Integer;\r
-\r
-                               case DbType.Int64:\r
-                               case DbType.UInt64:\r
-                                       return DbDataType.BigInt;\r
-\r
-                               case DbType.Date:\r
-                                       return DbDataType.Date;\r
-\r
-                               case DbType.Time:\r
-                                       return DbDataType.Time;\r
-\r
-                               case DbType.DateTime:\r
-                                       return DbDataType.TimeStamp;\r
-\r
-                               case DbType.Object:\r
-                               case DbType.Binary:\r
-                                       return DbDataType.Binary;\r
-\r
-                               case DbType.Decimal:\r
-                                       return DbDataType.Decimal;\r
-\r
-                               case DbType.Double:\r
-                                       return DbDataType.Double;\r
-\r
-                               case DbType.Single:\r
-                                       return DbDataType.Float;\r
-\r
-                               case DbType.Guid:\r
-                                       return DbDataType.Guid;\r
-\r
-                               default:\r
-                                       throw new ArgumentException("Invalid data type");\r
-                       }\r
-               }\r
-\r
-               #endregion\r
-       }\r
-}\r
+/*
+ *     Firebird ADO.NET Data provider for .NET and Mono 
+ * 
+ *        The contents of this file are subject to the Initial 
+ *        Developer's Public License Version 1.0 (the "License"); 
+ *        you may not use this file except in compliance with the 
+ *        License. You may obtain a copy of the License at 
+ *        http://www.firebirdsql.org/index.php?op=doc&id=idpl
+ *
+ *        Software distributed under the License is distributed on 
+ *        an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either 
+ *        express or implied. See the License for the specific 
+ *        language governing rights and limitations under the License.
+ * 
+ *     Copyright (c) 2002, 2005 Carlos Guzman Alvarez
+ *     All Rights Reserved.
+ */
+
+using System;
+using System.Data;
+
+namespace FirebirdSql.Data.Common
+{
+       internal sealed class TypeHelper
+       {
+               #region Constructors
+
+               private TypeHelper()
+               {
+               }
+
+               #endregion
+
+               #region Static Methods
+
+               public static short GetSize(DbDataType dataType)
+               {
+                       switch (dataType)
+                       {
+                               case DbDataType.Array:
+                               case DbDataType.Binary:
+                               case DbDataType.Text:
+                                       return 8;
+
+                               case DbDataType.SmallInt:
+                                       return 2;
+
+                               case DbDataType.Integer:
+                               case DbDataType.Float:
+                               case DbDataType.Date:
+                               case DbDataType.Time:
+                                       return 4;
+
+                               case DbDataType.BigInt:
+                               case DbDataType.Double:
+                               case DbDataType.TimeStamp:
+                                       return 8;
+
+                               case DbDataType.Guid:
+                                       return 16;
+
+                               default:
+                                       return 0;
+                       }
+               }
+
+               public static int GetFbType(DbDataType dataType, bool isNullable)
+               {
+                       int sqltype = 0;
+
+                       switch (dataType)
+                       {
+                               case DbDataType.Array:
+                                       sqltype = IscCodes.SQL_ARRAY;
+                                       break;
+
+                               case DbDataType.Binary:
+                               case DbDataType.Text:
+                                       sqltype = IscCodes.SQL_BLOB;
+                                       break;
+
+                               case DbDataType.Char:
+                                       sqltype = IscCodes.SQL_TEXT;
+                                       break;
+
+                               case DbDataType.VarChar:
+                                       sqltype = IscCodes.SQL_VARYING;
+                                       break;
+
+                               case DbDataType.SmallInt:
+                                       sqltype = IscCodes.SQL_SHORT;
+                                       break;
+
+                               case DbDataType.Integer:
+                                       sqltype = IscCodes.SQL_LONG;
+                                       break;
+
+                               case DbDataType.BigInt:
+                                       sqltype = IscCodes.SQL_INT64;
+                                       break;
+
+                               case DbDataType.Float:
+                                       sqltype = IscCodes.SQL_FLOAT;
+                                       break;
+
+                               case DbDataType.Guid:
+                                       sqltype = IscCodes.SQL_TEXT;
+                                       break;
+
+                               case DbDataType.Double:
+                                       sqltype = IscCodes.SQL_DOUBLE;
+                                       break;
+
+                               case DbDataType.Date:
+                                       sqltype = IscCodes.SQL_TYPE_DATE;
+                                       break;
+
+                               case DbDataType.Time:
+                                       sqltype = IscCodes.SQL_TYPE_TIME;
+                                       break;
+
+                               case DbDataType.TimeStamp:
+                                       sqltype = IscCodes.SQL_TIMESTAMP;
+                                       break;
+
+                               default:
+                                       throw new ArgumentException("Invalid data type");
+                       }
+
+                       if (isNullable)
+                       {
+                               sqltype++;
+                       }
+
+                       return sqltype;
+               }
+
+               public static int GetFbType(int blrType)
+               {
+                       switch (blrType)
+                       {
+                               case IscCodes.blr_varying:
+                               case IscCodes.blr_varying2:
+                                       return IscCodes.SQL_VARYING;
+
+                               case IscCodes.blr_text:
+                               case IscCodes.blr_text2:
+                               case IscCodes.blr_cstring:
+                               case IscCodes.blr_cstring2:
+                                       return IscCodes.SQL_TEXT;
+
+                               case IscCodes.blr_short:
+                                       return IscCodes.SQL_SHORT;
+
+                               case IscCodes.blr_long:
+                                       return IscCodes.SQL_LONG;
+
+                               case IscCodes.blr_quad:
+                                       return IscCodes.SQL_QUAD;
+
+                               case IscCodes.blr_int64:
+                               case IscCodes.blr_blob_id:
+                                       return IscCodes.SQL_INT64;
+
+                               case IscCodes.blr_double:
+                                       return IscCodes.SQL_DOUBLE;
+
+                               case IscCodes.blr_d_float:
+                                       return IscCodes.SQL_D_FLOAT;
+
+                               case IscCodes.blr_float:
+                                       return IscCodes.SQL_FLOAT;
+
+                               case IscCodes.blr_sql_date:
+                                       return IscCodes.SQL_TYPE_DATE;
+
+                               case IscCodes.blr_sql_time:
+                                       return IscCodes.SQL_TYPE_TIME;
+
+                               case IscCodes.blr_timestamp:
+                                       return IscCodes.SQL_TIMESTAMP;
+
+                               case IscCodes.blr_blob:
+                                       return IscCodes.SQL_BLOB;
+
+                               default:
+                                       throw new ArgumentException("Invalid data type");
+                       }
+               }
+
+               public static DbDataType GetDbDataType(int blrType, int subType, int scale)
+               {
+                       switch (blrType)
+                       {
+                               case IscCodes.blr_varying:
+                               case IscCodes.blr_varying2:
+                                       return DbDataType.VarChar;
+
+                               case IscCodes.blr_text:
+                               case IscCodes.blr_text2:
+                                       return DbDataType.Char;
+
+                               case IscCodes.blr_cstring:
+                               case IscCodes.blr_cstring2:
+                                       return DbDataType.Text;
+
+                               case IscCodes.blr_short:
+                    if (subType == 2)
+                    {
+                        return DbDataType.Decimal;
+                    }
+                    else if (subType == 1)
+                    {
+                        return DbDataType.Numeric;
+                    }
+                                       else
+                                       {
+                                               return DbDataType.SmallInt;
+                                       }
+
+                               case IscCodes.blr_long:
+                    if (subType == 2)
+                    {
+                        return DbDataType.Decimal;
+                    }
+                    else if (subType == 1)
+                    {
+                        return DbDataType.Numeric;
+                    }
+                                       else
+                                       {
+                                               return DbDataType.Integer;
+                                       }
+
+                               case IscCodes.blr_quad:
+                               case IscCodes.blr_int64:
+                               case IscCodes.blr_blob_id:
+                    if (subType == 2)
+                    {
+                        return DbDataType.Decimal;
+                    }
+                    else if (subType == 1)
+                    {
+                        return DbDataType.Numeric;
+                    }
+                                       else
+                                       {
+                                               return DbDataType.BigInt;
+                                       }
+
+                               case IscCodes.blr_double:
+                               case IscCodes.blr_d_float:
+                                       return DbDataType.Double;
+
+                               case IscCodes.blr_float:
+                                       return DbDataType.Float;
+
+                               case IscCodes.blr_sql_date:
+                                       return DbDataType.Date;
+
+                               case IscCodes.blr_sql_time:
+                                       return DbDataType.Time;
+
+                               case IscCodes.blr_timestamp:
+                                       return DbDataType.TimeStamp;
+
+                               case IscCodes.blr_blob:
+                                       if (subType == 1)
+                                       {
+                                               return DbDataType.Text;
+                                       }
+                                       else
+                                       {
+                                               return DbDataType.Binary;
+                                       }
+
+                               default:
+                                       throw new ArgumentException("Invalid data type");
+                       }
+               }
+
+               public static string GetDataTypeName(DbDataType dataType)
+               {
+                       switch (dataType)
+                       {
+                               case DbDataType.Array:
+                                       return "ARRAY";
+
+                               case DbDataType.Binary:
+                                       return "BLOB";
+
+                               case DbDataType.Text:
+                                       return "BLOB SUB_TYPE 1";
+
+                               case DbDataType.Char:
+                               case DbDataType.Guid:
+                                       return "CHAR";
+
+                               case DbDataType.VarChar:
+                                       return "VARCHAR";
+
+                               case DbDataType.SmallInt:
+                                       return "SMALLINT";
+
+                               case DbDataType.Integer:
+                                       return "INTEGER";
+
+                               case DbDataType.Float:
+                                       return "FLOAT";
+
+                               case DbDataType.Double:
+                                       return "DOUBLE PRECISION";
+
+                               case DbDataType.BigInt:
+                                       return "BIGINT";
+
+                               case DbDataType.Numeric:
+                                       return "NUMERIC";
+
+                               case DbDataType.Decimal:
+                                       return "DECIMAL";
+
+                               case DbDataType.Date:
+                                       return "DATE";
+
+                               case DbDataType.Time:
+                                       return "TIME";
+
+                               case DbDataType.TimeStamp:
+                                       return "TIMESTAMP";
+
+                               default:
+                                       return null;
+                       }
+               }
+
+               public static DbType GetDbType(DbDataType type)
+               {
+                       switch (type)
+                       {
+                               case DbDataType.Array:
+                               case DbDataType.Binary:
+                                       return DbType.Binary;
+
+                               case DbDataType.Text:
+                               case DbDataType.VarChar:
+                               case DbDataType.Char:
+                                       return DbType.String;
+
+                               case DbDataType.SmallInt:
+                                       return DbType.Int16;
+
+                               case DbDataType.Integer:
+                                       return DbType.Int32;
+
+                               case DbDataType.BigInt:
+                                       return DbType.Int64;
+
+                               case DbDataType.Date:
+                                       return DbType.Date;
+
+                               case DbDataType.Time:
+                                       return DbType.Time;
+
+                               case DbDataType.TimeStamp:
+                                       return DbType.DateTime;
+
+                               case DbDataType.Numeric:
+                               case DbDataType.Decimal:
+                                       return DbType.Decimal;
+
+                               case DbDataType.Float:
+                                       return DbType.Single;
+
+                               case DbDataType.Double:
+                                       return DbType.Double;
+
+                               case DbDataType.Guid:
+                                       return DbType.Guid;
+
+                               default:
+                                       throw new ArgumentException("Invalid data type");
+                       }
+               }
+
+               public static DbDataType GetDbDataType(DbType dbType)
+               {
+                       switch (dbType)
+                       {
+                               case DbType.String:
+                               case DbType.AnsiString:
+                                       return DbDataType.VarChar;
+
+                               case DbType.StringFixedLength:
+                               case DbType.AnsiStringFixedLength:
+                                       return DbDataType.Char;
+
+                               case DbType.Boolean:
+                               case DbType.Byte:
+                               case DbType.SByte:
+                               case DbType.Int16:
+                               case DbType.UInt16:
+                                       return DbDataType.SmallInt;
+
+                               case DbType.Int32:
+                               case DbType.UInt32:
+                                       return DbDataType.Integer;
+
+                               case DbType.Int64:
+                               case DbType.UInt64:
+                                       return DbDataType.BigInt;
+
+                               case DbType.Date:
+                                       return DbDataType.Date;
+
+                               case DbType.Time:
+                                       return DbDataType.Time;
+
+                               case DbType.DateTime:
+                                       return DbDataType.TimeStamp;
+
+                               case DbType.Object:
+                               case DbType.Binary:
+                                       return DbDataType.Binary;
+
+                               case DbType.Decimal:
+                                       return DbDataType.Decimal;
+
+                               case DbType.Double:
+                                       return DbDataType.Double;
+
+                               case DbType.Single:
+                                       return DbDataType.Float;
+
+                               case DbType.Guid:
+                                       return DbDataType.Guid;
+
+                               default:
+                                       throw new ArgumentException("Invalid data type");
+                       }
+               }
+
+               #endregion
+       }
+}