En gang imellem bruger jeg oceaner af tid, på at lede i .NET frameworkets dokumentation, og på at snuse i Reflector for at finde en klasse, eller en metode, så jeg er fri for at skriveen selv. Jeg har bare på fornemmelsen, at den findes!
Sådan har jeg ledt efter en metode, der kan konverterer tallet fra skemakolonnen: “DATA_TYPE” (OleDbConnection.GetSchema()), til en almindelig .NET-type. Det er bare ikke lykkedes, så nu har jeg skrevet en selv:
public static Type GetNativeType(int oleDbType)
{
var type = (OleDbType)oleDbType;
switch (type)
{
case OleDbType.LongVarBinary:
case OleDbType.LongVarChar:
case OleDbType.BSTR:
case OleDbType.DBTime:
case OleDbType.VarWChar:
case OleDbType.WChar:
case OleDbType.LongVarWChar:
case OleDbType.VarChar:
return typeof(string);
case OleDbType.DBDate:
case OleDbType.DBTimeStamp:
case OleDbType.Date:
return typeof(DateTime);
case OleDbType.Decimal:
case OleDbType.Currency:
return typeof(decimal);
case OleDbType.Double:
return typeof(double);
case OleDbType.UnsignedSmallInt:
case OleDbType.Integer:
case OleDbType.SmallInt:
return typeof(Int16);
case OleDbType.UnsignedInt:
case OleDbType.Error:
return typeof(Int32);
case OleDbType.BigInt:
case OleDbType.Filetime:
case OleDbType.UnsignedBigInt:
return typeof(Int64);
case OleDbType.Guid:
return typeof(Guid);
case OleDbType.Numeric:
case OleDbType.VarNumeric:
return typeof(float);
case OleDbType.Single:
return typeof(Single);
case OleDbType.TinyInt:
case OleDbType.UnsignedTinyInt:
return typeof(byte);
case OleDbType.VarBinary:
case OleDbType.Binary:
return typeof(byte[]);
case OleDbType.Boolean:
return typeof(bool);
case OleDbType.Char:
return typeof(char);
case OleDbType.Empty:
return null;
case OleDbType.IDispatch:
case OleDbType.IUnknown:
case OleDbType.Variant:
case OleDbType.PropVariant:
default:
throw new NotSupportedException("Ikke understøttet type: " + type.ToString());
}
}
Det tog ikke lang tid, sammenlignet med den tid jeg brugte med næsen i dokumentationen. Koden virker, men jeg sidder bare og er noget utilfreds, for jeg VED at der eet eller andet sted, i vores store framework, findes en klasse med en metode der gør lige netop det min metode gør. Men hvordan finder man den?
Jeg er sikker på at min publicering her, vil afstedkomme en kommentar som: “Hvorfor bruger du ikke bare: xxx.GetType()….”. Og den glæder jeg mig til at se :-)
Code on…