كيف يجب أن أزول نوعا تعريف المستخدم إلى SQLPARAMETERCOLLECOLE.ADDWITHVALUE؟

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

سؤال

لدي نوع بيانات مخصص يسمى 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top