in MySQL.Data/src/MySqlParameter.cs [401:440]
private void SetTypeFromValue()
{
if (_paramValue == null || _paramValue == DBNull.Value) return;
if (_paramValue is Guid)
MySqlDbType = MySqlDbType.Guid;
else if (_paramValue is TimeSpan)
MySqlDbType = MySqlDbType.Time;
else if (_paramValue is DateTimeOffset)
MySqlDbType = MySqlDbType.DateTime;
else if (_paramValue is bool)
MySqlDbType = MySqlDbType.Byte;
else
{
Type t = _paramValue.GetType();
if (t.GetTypeInfo().BaseType == typeof(Enum))
t = t.GetTypeInfo().GetEnumUnderlyingType();
switch (t.Name)
{
case "SByte": MySqlDbType = MySqlDbType.Byte; break;
case "Byte": MySqlDbType = MySqlDbType.UByte; break;
case "Int16": MySqlDbType = MySqlDbType.Int16; break;
case "UInt16": MySqlDbType = MySqlDbType.UInt16; break;
case "Int32": MySqlDbType = MySqlDbType.Int32; break;
case "UInt32": MySqlDbType = MySqlDbType.UInt32; break;
case "Int64": MySqlDbType = MySqlDbType.Int64; break;
case "UInt64": MySqlDbType = MySqlDbType.UInt64; break;
case "DateTime": MySqlDbType = MySqlDbType.DateTime; break;
case "String": MySqlDbType = MySqlDbType.VarChar; break;
case "Single": MySqlDbType = MySqlDbType.Float; break;
case "Double": MySqlDbType = MySqlDbType.Double; break;
case "MySqlGeometry": MySqlDbType = MySqlDbType.Geometry; break;
case "Decimal": MySqlDbType = MySqlDbType.Decimal; break;
case "Object":
default:
MySqlDbType = MySqlDbType.Blob;
break;
}
}
}