نمایش نتایج 1 تا 2 از 2

نام تاپیک: مشکل با دیتاست ساخته شده توسط Code Generator های ویژوال استودیو

  1. #1
    کاربر دائمی آواتار csharpcollegian
    تاریخ عضویت
    خرداد 1394
    محل زندگی
    تهران
    پست
    174

    Question مشکل با دیتاست ساخته شده توسط Code Generator های ویژوال استودیو

    سلام دوستان وقتتون به خیر
    دوستان من در برنامه های گذشتم وقتی میخواستم اطلاعاتی رو از بانک بخونم و به لایه های بالاتر برنامم انتقال بدم، بعد از اینکه اطلاعات مورد نظرم رو از بانک میخوندم، DataTable حاوی اطلاعات رو در همون لایه Data Access در یک <>List کپی کرده و به لایه ی بالاتر منتقل می کردم. برای مثال با فرض اینکه قصد داریم اطلاعات جدول Person رو از بانک بخونیم و PersonEntity هم شی متناظر جدول در برناممون هست :

    DataTable dtPerson = new DataTable();
    .
    .
    .
    dataAdapter.Fill(dtPerson);
    List<PersonEntity> personList = new List<PersonEntity>();
    foreach (DataRow person in dtPerson.Rows)
    {
    PersonEntity personObj = new PersonEntity();
    personObj.ID = (int)person["ID"];
    personObj.Name = (string)person["Name"];
    personObj.Phone = (string)person["Phone"];
    personList.Add(personObj);
    }
    return personList;

    اما چند وقت پیش توو این سایت دیدم که با اضافه کردن DataSet بانک اطلاعاتی به برنامه و کمک گرفتن از شی های متناظر جداول بانک که توسط خود ویژوال طراحی میشن و ترکیب اون با روش بالا میشه راحت تر کد زد. برای مثال با فرض اینکه نام DataSet بانک اطلاعاتیمون dsPhonebook باشه :

    var dtPerson = new dsPhonebook.PersonDataTable();
    .
    .
    .
    dataAdapter.Fill(dtPerson);
    List<PersonEntity> personList = new List<PersonEntity>();
    foreach (var person in dtPersons)
    {
    PersonEntity personObj = new PersonEntity();
    personObj.ID = person.ID;
    personObj.Name = person.Name;
    personObj.Phone = person.Phone;
    personList.Add(personObj);
    }
    return personList;

    خب حالا اگه یکی از فیلدهای جدولمون در بانک اطلاعاتی مقدار Null داشته باشه (مثلا فیلد Phone). در روش اول برای جلوگیری از بروز مشکل از یه if قبل از کپی فیلد Phone استفاده می کردم و مشکل حل میشد :


    if (person["Phone"] != DBNull.Value)
    personObj.Phone = (string)person["Phone"];

    اما در روش دوم امکان این کار وجود نداره. چون get در پراپرتی Phone طوری تنظیم شده که اگر مقدار Null بود استثنا تولید کنه و if بالا قابل پیاده سازی نیست :

    public string Phone {
    get {
    try {
    return ((string)(this[this.tabletblUser.PhoneColumn]));
    }
    catch (global::System.InvalidCastException e) {
    throw new global::System.Data.StrongTypingException("The value for column \'Phone\' in table \'tblUser\' is DBNull.", e);
    }
    }
    set {
    this[this.tabletblUser.PhoneColumn] = value;
    }
    }

    دوستان و اساتید محترم نظرشون چیه ؟
    ببخشید که طولانی شد
    ممنونم
    آخرین ویرایش به وسیله csharpcollegian : چهارشنبه 15 دی 1395 در 00:12 صبح

  2. #2
    مدیر بخش آواتار ژیار رحیمی
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تهران
    پست
    1,095

    نقل قول: مشکل با دیتاست ساخته شده توسط Code Generator های ویژوال استودیو

    خب در قسمت get پراپرتی try و catch رو بردار و بصورت زیر بنویس

    get {
    var tmp=(string)(this[this.tabletblUser.PhoneColumn]);
    if(tmp!=null)return tmp;
    return string.Empty;
    }
    First,solve the problem then write the code

تاپیک های مشابه

  1. مشکل در Setup ساخته شده توسط Visual 2012
    نوشته شده توسط forbidden_1991 در بخش Setup و Deployment
    پاسخ: 0
    آخرین پست: دوشنبه 28 اردیبهشت 1394, 21:24 عصر
  2. مشکل در Setup ساخته شده توسط Visual 2012
    نوشته شده توسط forbidden_1991 در بخش C#‎‎
    پاسخ: 0
    آخرین پست: دوشنبه 28 اردیبهشت 1394, 21:24 عصر
  3. پاسخ: 1
    آخرین پست: یک شنبه 19 بهمن 1393, 19:59 عصر
  4. مشکل با اشیا لود شده توسط اجاکس
    نوشته شده توسط NIMA_1981 در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: یک شنبه 21 اسفند 1390, 21:05 عصر
  5. سوال: مشکل با فایل ساخته شده دلفی 2010
    نوشته شده توسط nsco_nsco در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 9
    آخرین پست: جمعه 19 فروردین 1390, 20:16 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •