- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
private NpgsqlDbType GetDbType(Type clrType, bool large = false)
{
if (clrType == null)
throw new ArgumentNullException("clrType");
// Try to get underlying type if it is nullable type.
clrType = Nullable.GetUnderlyingType(clrType) ?? clrType;
if (clrType == typeof(int) || clrType == typeof(uint))
{
return NpgsqlDbType.Integer;
}
else if (clrType == typeof(byte) || clrType == typeof(sbyte) || clrType == typeof(short) || clrType == typeof(ushort))
{
return NpgsqlDbType.Smallint;
}
else if (clrType == typeof(long) || clrType == typeof(ulong))
{
return NpgsqlDbType.Bigint;
}
else if (clrType == typeof(double))
{
return NpgsqlDbType.Double;
}
else if (clrType == typeof(float))
{
return NpgsqlDbType.Real;
}
else if (clrType == typeof(decimal))
{
return NpgsqlDbType.Numeric;
}
else if (clrType == typeof(bool))
{
return NpgsqlDbType.Boolean;
}
else if (clrType == typeof(string))
{
return large ? NpgsqlDbType.Text : NpgsqlDbType.Varchar;
}
else if (clrType == typeof(char))
{
return NpgsqlDbType.Char;
}
else if (clrType == typeof(DateTime))
{
return NpgsqlDbType.Timestamp;
}
else if (clrType == typeof(Guid))
{
return NpgsqlDbType.Uuid;
}
else if (typeof(Array).IsAssignableFrom(clrType))
{
return NpgsqlDbType.Array | GetDbType(clrType.GetElementType(), large);
}
else
throw new NotSupportedException(string.Format("Not supported clr type {0} to convert {1}.", clrType.FullName, typeof(NpgsqlDbType).FullName));
}