I'm working on a type converter for .Net to Sql and .Net to OleDb.
First, I create a class called DataType:
public class DataType
{
public DotNetTypes? DotNetType { get; private set; }
public SqlDbType? SqlDbType { get; private set; }
public OleDbType? OleDbType { get; private set; }
public DataType(DotNetTypes? dotNetType, SqlDbType? sqlDbType, OleDbType? oleDbType)
{
DotNetType = dotNetType;
SqlDbType = sqlDbType;
OleDbType = oleDbType;
}
}
Next I load it like this:
private static List<DataType> DataTypes;
static DataTypeConversion()
{
Load();
}
private static void Load()
{
DataTypes = new List<DataType>
{
new DataType(DotNetTypes.Short, SqlDbType.SmallInt, null),
new DataType(DotNetTypes.Int32, SqlDbType.Int, null),
new DataType(DotNetTypes.Int64, SqlDbType.BigInt, null),
new DataType(DotNetTypes.Boolean, SqlDbType.Bit, null),
new DataType(DotNetTypes.Double, SqlDbType.Float, null),
new DataType(DotNetTypes.Float, SqlDbType.Real, null),
new DataType(DotNetTypes.Guid, SqlDbType.UniqueIdentifier, null),
new DataType(DotNetTypes.Byte, SqlDbType.TinyInt, null),
new DataType(DotNetTypes.DataTable, SqlDbType.Structured, null),
new DataType(DotNetTypes.DateTime, SqlDbType.DateTime, null),
new DataType(DotNetTypes.DateTime, SqlDbType.SmallDateTime, null),
new DataType(DotNetTypes.DateTime, SqlDbType.Date, null),
new DataType(DotNetTypes.DateTime, SqlDbType.Time, null),
new DataType(DotNetTypes.DateTime, SqlDbType.DateTime2, null),
new DataType(DotNetTypes.DateTimeOffset, SqlDbType.DateTimeOffset, null),
new DataType(DotNetTypes.Object, SqlDbType.Variant, null),
new DataType(DotNetTypes.Object, SqlDbType.Udt, null),
new DataType(DotNetTypes.Decimal, SqlDbType.Decimal, null),
new DataType(DotNetTypes.Decimal, SqlDbType.Money, null),
new DataType(DotNetTypes.Decimal, SqlDbType.SmallMoney, null),
new DataType(DotNetTypes.Byte, SqlDbType.Binary, null),
new DataType(DotNetTypes.Byte, SqlDbType.Image, null),
new DataType(DotNetTypes.Byte, SqlDbType.VarBinary, null),
new DataType(DotNetTypes.Byte, SqlDbType.Timestamp, null),
new DataType(DotNetTypes.String, SqlDbType.NVarChar, null),
new DataType(DotNetTypes.String, SqlDbType.VarChar, null),
new DataType(DotNetTypes.String, SqlDbType.Char, null),
new DataType(DotNetTypes.String, SqlDbType.NChar, null),
new DataType(DotNetTypes.String, SqlDbType.NText, null),
new DataType(DotNetTypes.String, SqlDbType.Text, null),
new DataType(DotNetTypes.String, SqlDbType.Xml, null)
};
}
To do this I created an enum called DotNetTypes:
public enum DotNetTypes
{
@Unknown,
@Short,
@Boolean,
@Byte,
@Char,
@DateTime,
@DateTimeOffset,
@Decimal,
@Double,
@Int32,
@Int16,
@Int64,
@Float,
@Object,
@SByte,
@Single,
@String,
@UInt16,
@UInt32,
@UInt64,
@Guid,
@DataTable
}
Notice that in the Load method I have
new DataType(DotNetTypes.Byte, SqlDbType.Binary, null),
new DataType(DotNetTypes.Byte, SqlDbType.Image, null),
new DataType(DotNetTypes.Byte, SqlDbType.VarBinary, null),
new DataType(DotNetTypes.Byte, SqlDbType.Timestamp, null),
The problem is that these should be byte arrays, not byte. So what is the syntax for this in my DotNetTypes enum?
If it's not broken, fix it until it is.
Everything makes sense in someone's mind.
Ya can't fix stupid.
|