2008-09-18 66 views
9

如何最好地將System.Data.DbType枚舉值轉換爲對應的(或至少一個可能對應的)System.Type值?如何最好地將DbType轉換爲System.Type?

例如:

DbType.StringFixedLength -> System.String 
DbType.String -> System.String 
DbType.Int32 -> System.Int32 

我只看到很「髒」的解決方案,但沒有真正乾淨。

(是的,這是一個後續行動,我的一個不同的問題,但它使更多的意義,因爲兩個不同的問題)

回答

6

AFAIK沒有內置在.NET轉換器的SqlDbType轉換爲系統。類型。但瞭解映射,您可以輕鬆地將您自己的轉換器從簡單字典轉換爲更高級(基於可擴展性的XML)解決方案。

映射可以在這裏找到: http://www.carlprothman.net/Default.aspx?tabid=97

4

System.Data.SqlClient的對象使用元類型組件的DbType和SqlDbType轉換爲.NET CLR類型。使用反射,如果需要的話,你可以利用這種能力:

var dbType = DbType.Currency; 

Type metaClrType = Type.GetType(
    "System.Data.SqlClient.MetaType, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", 
    true, 
    true 
    ); 

object metaType = metaClrType.InvokeMember(
    "GetMetaTypeFromDbType", 
    BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.NonPublic, 
    null, 
    null, 
    new object[] { dbType } 
); 

var classType = (Type)metaClrType.InvokeMember(
    "ClassType", 
    BindingFlags.GetField | BindingFlags.Instance | BindingFlags.NonPublic, 
    null, 
    metaType, 
    null 
); 

string cSharpDataType = classType.FullName; 
+0

雖然這似乎是工作,我認爲這是一個無證的呼叫,可能無法在框架的未來版本和/或可能不提供非.NET的Windows版本? – 2015-01-16 12:11:10

相關問題