2008-09-18 13 views
9

मैं सिस्टम.डाटा.डीबी टाइप टाइप मूल्य को संबंधित (या कम से कम एक संभावित संबंधित) सिस्टम में कैसे परिवर्तित कर सकता हूं। टाइप मान?मैं डीबीटी टाइप को सिस्टम में कैसे परिवर्तित कर सकता हूं। टाइप करें?

उदाहरण के लिए:

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

मैं केवल बहुत "गंदे" समाधान लेकिन कुछ भी वास्तव में साफ देखा है।

(हाँ, यह एक खदान का एक अलग सवाल का अनुवर्ती है, लेकिन यह दो अलग सवाल के रूप में अधिक समझ में बनाया)

उत्तर

6

AFAIK वहाँ है कोई एक प्रणाली के लिए एक SqlDbType परिवर्तित करने के लिए निर्मित .NET में कनवर्टर ।प्रकार। लेकिन मैपिंग को जानना आप आसानी से एक सरल शब्दकोश से लेकर अधिक उन्नत (एक्स्टेंसिबिलिटी के लिए एक्सएमएल) समाधानों से लेकर अपने स्वयं के कनवर्टर को आसानी से रोल कर सकते हैं।

मानचित्रण यहां पाया जा सकता: http://www.carlprothman.net/Default.aspx?tabid=97

4

System.Data.SqlClient वस्तुओं .NET CLR प्रकार के DbType और SqlDbType अनुवाद करने के लिए MetaType घटक का उपयोग करें। प्रतिबिंब का उपयोग करना, आप इस क्षमता का लाभ उठाने सकता है अगर जरूरत है:

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 के विंडोज संस्करण? –

संबंधित मुद्दे