簡體   English   中英

將SqlDbType轉換為.net類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM