PDA

View Full Version : سوال: خطا موقع آپ ديت کردن با Linq



Itist82
یک شنبه 20 شهریور 1390, 11:05 صبح
سلام
من کدي شبيه زير نوشتم:



DataClassesDataContext db = new DataClassesDataContext();
var q = (from p in db.Messages
where p.Message_Id == Convert.ToInt16(Request.QueryString["ID"])
select p);
var m= q.Single();
m.ReadMessage = "yes";
db.SubmitChanges();







اما در خطي که تابع Single وجود داره ازم خطا مي گيره که:
Specified cast is not valid.

در واقع توي کل پروژه من فقط Insert ها با دستورات Linq کار مي کنن و بقيه مثل آپ ديت و کوئري براي خوندن اطلاعات (موقعي که حاصل کوئري رو به ديتا گريد مي دم) کار نمي کنن و هميشه همين خطا رو مي ده.
خيلي سرچ کردم، هيچ کس چيز اضافه تري نگفته، ديگه واقعا نمي دونم چه کار کنم.:ناراحت::افسرده:
يه بار هم با ايجاد فايل dbml سعي کردم آپ ديت انجام بدم که اونجا کار کرد و انجام داد. ولي واقعا دلم مي خواد بدونم کجاي کار من ايراد داره که کد من اجرا نمي شه:متفکر:

mehdi.mousavi
یک شنبه 20 شهریور 1390, 11:58 صبح
سلام.
این خطا (و البته کدی که ارسال کرده اید) نشون میده که در بانک اطلاعاتی، Data Type فیلد Message_Id با Data Type تعریف شده در فایل dbml شما سازگار نیست.
به بیان دیگه، در بانک اطلاعاتی Message_Id رو (فرضا) bigint تعریف کرده اید، اما در فایل dbml همون فیلد بصورت int تعریف شده. وقتی قراره Mapping مربوطه صورت
بگیره، سیستم قادر نخواهد بود تا int64 رو به int32 تبدیل کنه و در نتیجه این Error رخ میده. برای رفع مشکل، در بانک اطلاعاتی خودتون، Message_Id رو int تعریف کنید
و جای Convert.ToInt16 بنویسید Convert.ToInt32. سپس مطمئنا بشید فایل dbml شما با بانک Sync هستش.

موفق باشید.

Itist82
یک شنبه 20 شهریور 1390, 15:58 عصر
واقعا ممنون! مسئله همين اختلاف نوع داده ها بود. در واقع من کليد اصلي جدولمو چون مي دونستم هيچ وقت يکي دو سطر بيشتر توش ايجاد نخواد شد tinyint تعريف کرده بودم. با اينکه کليد اصلي، ستوني بود که اتوماتيک توسط پايگاه داده مقدار دهي مي شد اما اين ايراد رو توليد مي کرد. رفتم توي پايگاه و اونو int کردم و حل شد. هم آپ ديت ها درست شدن و هم حاصل کوئري ها کار مي کنن.
بازم ممنون