كيف يجب أن أزول نوعا تعريف المستخدم إلى SQLPARAMETERCOLLECOLE.ADDWITHVALUE؟
-
12-09-2019 - |
سؤال
لدي نوع بيانات مخصص يسمى StudentID
, ، والتي لها تحويل ضمني إلى سلسلة.
عندما اجتيز StudentID
على سبيل المثال SqlCommand.Parameters.AddWithValue
(كقيمة) وتنفيذ الأمر، أتلقى الخطأ التالي:
No mapping exists from object type StudentID to a known managed provider native type.
تحديد نوع لمعلمة مثل SqlDbType.NVarChar
لا يساعد. الشيء الوحيد الذي يعمل هو يلقي صراحة StudentID
القيمة إلى سلسلة، والتي تهزم الغرض من وجود المصبوب الضمني.
أعتقد أن الإطار لا ينظر في التحويلات المتاحة. هل هناك أي شيء يمكنني القيام به ل StudentID
فئة لجعل الأمر يتعامل معه دون الحاجة إلى وضع صريح إلى نوع بدائي؟
هذه المادة MSDN يتحدث عن كيفية التعامل مع أنواع البدائية، ولكن ليس أنواع المعرفة من قبل المستخدم. ستكون أقرب مباراة كائن، والتي تقول مرت بمثابة متغير.
النقطة الدقيقة للفشل موجودة في system.data.sqlclient.metatype.gettatatePeFromValue، مع التوقيع private static MetaType GetMetaTypeFromValue(Type dataType, object value, bool inferLen)
. وبعد يكشف التفكير أنه يبحث عن أنواعها الأولية، وإذا كان Typecode كائن، فهو يبحث عن أنواع بيانات SQL * مثل SQLBoolean، لذلك يبدو أن تبحث عن أنواع محددة للغاية من أنواع البدائية أو SQL *.
المحلول
كما أعرف أنك لا تستطيع تمرير UDTs. يسمح فقط بدائي أو SQL * أنواع.
نصائح أخرى
يبدو أنه يمكنك استخدام SqlUserDefinedTypeAttribute
مع نوع مخصص الخاص بك. نلقي نظرة على حاضر بداية شئ GetMetaTypeFromValue
.