internal static SqlDbType ValueTypeToSqlDbType(Type type)
{
switch (Type.GetTypeCode(type)) {
case TypeCode.Boolean: return SqlDbType.Bit;
case TypeCode.Byte: return SqlDbType.TinyInt;
case TypeCode.Char: return SqlDbType.Char;
case TypeCode.DateTime: return SqlDbType.DateTime;
case TypeCode.DBNull: return SqlDbType.Variant;
case TypeCode.Decimal: return SqlDbType.Decimal;
case TypeCode.Double: return SqlDbType.Float;
case TypeCode.Empty: return SqlDbType.Variant;
case TypeCode.Int16: return SqlDbType.SmallInt;
case TypeCode.Int32: return SqlDbType.Int;
case TypeCode.Int64: return SqlDbType.BigInt;
default:
case TypeCode.Object: {
if (type.Equals(DbTypes.TypeOfByteArray)) return SqlDbType.VarBinary;
//if (type.Equals(DbTypes.TypeOfTimespan)) return OleDbType.DBTime;
if (type.Equals(DbTypes.TypeOfGuid)) return SqlDbType.UniqueIdentifier;
if (type.IsEnum)
return ValueTypeToSqlDbType (Enum.GetUnderlyingType (type));
return SqlDbType.Variant;
}
case TypeCode.SByte: return SqlDbType.TinyInt;
case TypeCode.Single: return SqlDbType.Float;
case TypeCode.String: return SqlDbType.NVarChar;
case TypeCode.UInt16: return SqlDbType.SmallInt;
case TypeCode.UInt32: return SqlDbType.Int;
case TypeCode.UInt64: return SqlDbType.BigInt;
}
}