[英]Convert SqlDbType to .net Type
有很多示例如何從標准:net類或實例轉換SqlDbType枚舉。 我在互聯網上找不到任何向后的解決方案。 這似乎不那么普遍,但是(我認為)應該是一個簡單的方法,而不是在所有31個枚舉成員上進行大量轉換的情況。
有誰知道如何以更好的方式將SqlDbType
轉換為.net Type,然后僅切換所有可能的枚舉值?
感謝Tim Schmelter的評論。 看來,那只是解決方案。
.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
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.