有很多示例,我们如何从标准的:net类或实例转换SqlDbType枚举。我在互联网上找不到任何向后的解决方案。这似乎不那么常见,但应该(以我认为)更简单的方法,而不是对所有31个枚举成员进行大量转换。
有人知道如何以更好的方式将SqlDbType
转换为.net Type,然后仅切换所有可能的枚举值吗?
感谢Tim Schmelter的评论。看来那只是解决方案。
答案 0 :(得分:0)
.NET不包含此映射(并且SqlType也很烂),这确实很奇怪,但是“更好的方式”是键入枚举的字典。如果您的项目仅支持可用列类型的子集,这也使测试有效性变得容易。我维护了一个项目,该项目处理动态定义的SQL表布局。这样,我的图书馆用户就只需要考虑SqlDbType
,而不必担心内部DataColumn
的映射。
internal static readonly Dictionary<SqlDbType, Type> equivalentSystemType = new Dictionary<SqlDbType, Type>
{
{ SqlDbType.BigInt, typeof(long) },
{ SqlDbType.Binary, typeof(byte[]) },
{ SqlDbType.Bit, typeof(bool) },
{ SqlDbType.Char, typeof(string) },
{ SqlDbType.Date, typeof(DateTime) },
{ SqlDbType.DateTime, typeof(DateTime) },
{ SqlDbType.DateTime2, typeof(DateTime) }, // SQL2008+
{ SqlDbType.DateTimeOffset, typeof(DateTimeOffset) }, // SQL2008+
{ SqlDbType.Decimal, typeof(decimal) },
{ SqlDbType.Float, typeof(double) },
{ SqlDbType.Image, typeof(byte[]) },
{ SqlDbType.Int, typeof(int) },
{ SqlDbType.Money, typeof(decimal) },
{ SqlDbType.NChar, typeof(string) },
{ SqlDbType.NVarChar, typeof(string) },
{ SqlDbType.Real, typeof(float) },
{ SqlDbType.SmallDateTime, typeof(DateTime) },
{ SqlDbType.SmallInt, typeof(short) },
{ SqlDbType.SmallMoney, typeof(decimal) },
{ SqlDbType.Time, typeof(TimeSpan) }, // SQL2008+
{ SqlDbType.TinyInt, typeof(byte) },
{ SqlDbType.UniqueIdentifier, typeof(Guid) },
{ SqlDbType.VarBinary, typeof(byte[]) },
{ SqlDbType.VarChar, typeof(string) },
{ SqlDbType.Xml, typeof(SqlXml) }
// omitted special types: timestamp
// omitted deprecated types: ntext, text
// not supported by enum: numeric, FILESTREAM, rowversion, sql_variant
};