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

نام تاپیک: not all code paths return a value

  1. #1
    کاربر دائمی آواتار shima2006
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    سن
    37
    پست
    339

    not all code paths return a value

    سلام دوستان
    من کد زیر رو در کلاس BaseDAL نوشتم


    publicobject ExecuteScaler(CommandType commandType, string commandText)
    {
    using (SqlConnection con = newSqlConnection(cnnStr))
    {
    SqlCommand cmd = newSqlCommand();
    cmd.Connection = con;
    cmd.CommandType = commandType;
    cmd.CommandText = commandText;
    object retVal =cmd.ExecuteScalar();
    return retVal;
    }
    }

    و در لایه DAL :

    publicobject Find()
    {
    string str1 = "SELECT MAX(ID) + 1 AS AccountId FROM dbo.Accounts";
    return ExecuteScaler(CommandType.Text ,str1);
    }

    در BOL هم اونو فراخوانی کردم :

    public DAL.AccountsDB SanadData = new DAL.AccountsDB();
    publicobject Find()
    {
    SanadData.Find();
    }

    ولی با خطای زیر مواجه میشم :
    not all code paths return a value
    کسی از دوستان دلیل رو میدونه؟!
    آخرین ویرایش به وسیله shima2006 : جمعه 19 آذر 1389 در 14:35 عصر

  2. #2
    کاربر دائمی آواتار taghi.km
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    زیر سایه خدا
    سن
    41
    پست
    108

    نقل قول: not all code paths return a value

    تو این قسمتpublicobject ExecuteScaler(CommandType commandType, string commandText){using (SqlConnection con = newSqlConnection(cnnStr)){SqlCommand cmd = newSqlCommand();cmd.Connection = con;cmd.CommandType = commandType;cmd.CommandText = commandText;object retVal =cmd.ExecuteScalar();return retVal;}}احتمال اینکه خروجی نداشته باشی هست بهتره که متغییر یازگشتی رو اول تعریف کنی بعد یه مقدار اولیه به اون بدی و قبا از اینکه تابع تموم بشه از return استفاده کنیبه این شکلpublicobject ExecuteScaler(CommandType commandType, string commandText){object retVal = 0;using (SqlConnection con = newSqlConnection(cnnStr)){SqlCommand cmd = newSqlCommand();cmd.Connection = con;cmd.CommandType = commandType;cmd.CommandText = commandText;retVal =cmd.ExecuteScalar();}return retVal;}در کل بهتره تو این فانکشن به جای object از integer استفاده کنی

  3. #3
    کاربر دائمی آواتار shima2006
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    سن
    37
    پست
    339

    نقل قول: not all code paths return a value

    دوست من همه این کارها رو انجام دادم ولی درست نشد
    دوستان نظر دیگه ای ندارین؟

  4. #4
    کاربر دائمی آواتار ahrimaneahurai
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران
    پست
    554

    نقل قول: not all code paths return a value

    شما وقتی از using استفاده میکنی بعد از اتمامش dispose میشه پس اگه توی using چیزی برنگرده خود تابع هم چیزی برنمیگردونه یا از using استفاده نکنید یا اگه میکنه بعد از اتمام using باز هم مقدار برگردونید

  5. #5
    کاربر دائمی آواتار shima2006
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    سن
    37
    پست
    339

    نقل قول: not all code paths return a value

    نقل قول نوشته شده توسط ahrimaneahurai مشاهده تاپیک
    شما وقتی از using استفاده میکنی بعد از اتمامش dispose میشه پس اگه توی using چیزی برنگرده خود تابع هم چیزی برنمیگردونه یا از using استفاده نکنید یا اگه میکنه بعد از اتمام using باز هم مقدار برگردونید
    متشکرم دوست من ، ولی من اصلا متوجه نمیشم این چه ربطی به USing داره ؟!!
    اگه لطف کنید و یک کم بیشتر توضیح بدید واقعا ممنون میشم...

  6. #6

    نقل قول: not all code paths return a value

    bad design

    retVal رو خارج از using تعریف کن
    داخل using مقدار دهی کن
    خارج از using مقدارش رو return کن.
    فکری هم برای هندل کردن Null Exception احتمالی بکن

    امثال این مختص سی شارپ نیست . با هر زبون دیگری هم میبود باید کار مشابه همین انجام داد.
    آخرین ویرایش به وسیله JaguarXF : شنبه 20 آذر 1389 در 06:12 صبح

  7. #7
    مدیر بخش آواتار mmd2009
    تاریخ عضویت
    اردیبهشت 1403
    محل زندگی
    تهران
    پست
    2,393

    نقل قول: not all code paths return a value

    با سلام

    در خط :

    publicobject Find()
    {
    SanadData.Find();
    }
    باید متد های غیر void رو مقدار بازگشی بهش داد. الان شما تو این متد هیچی رو بازگشت نمیدید.

    یا اینکه از نوع void تعرییفش کنید یا سرو صورتی به کدتون بدید.

    کسی که به خود اطمینان دارد به تعریف دیگران احتیاج ندارد. «گوستاو لوبون»


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

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