كيف يمكنني أفضل تحويل DbType النظام.النوع ؟

StackOverflow https://stackoverflow.com/questions/91160

  •  01-07-2019
  •  | 
  •  

سؤال

كيف يمكنني أفضل تحويل النظام.البيانات.DbType قيمة التعداد المقابلة (أو على الأقل واحدة من الممكن المقابلة) النظام.نوع القيم ؟

على سبيل المثال:

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

رأيت فقط جدا "القذرة" الحلول ولكن لا شيء حقا نظيفة.

(نعم, انها متابعة سؤال مختلف من الألغام ، ولكن كان من المنطقي اثنين منفصلة الأسئلة)

هل كانت مفيدة؟

المحلول

AFAIK هناك المدمج في محول في .صافي لتحويل SqlDbType إلى نظام.نوع.ولكن معرفة رسم الخرائط يمكنك بسهولة لفة الخاص بك محول تتراوح من بسيطة القاموس أكثر تقدما (XML القائمة على extensability) الحلول.

رسم الخرائط يمكن العثور عليها هنا:http://www.carlprothman.net/Default.aspx?tabid=97

نصائح أخرى

النظام.البيانات.SqlClient الكائنات استخدام MetaType مكون ترجمة 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;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top