PDA

View Full Version : مشکل در عدم اجرای دستور else



Mansoor92
جمعه 20 دی 1392, 22:12 عصر
سلام

ببخشید من دستور زیر رو مینویسم اما وارد دستور if میشه ولی وقتی شرط درست نباشه وارد دستور else نمیشه

ممنونم میشم راهنمایی کنید که مشکل کد چیه...


try
{
//var q = db.tbl_BaghiMande.Where(c => c.CodeR == code).Single();
var q1 = db.tbl_BaghiMande.FirstOrDefault(c => c.CodeR == code);

if (q1.CodeR != null)
{
var R = db.tbl_tamasshowreport.Where(c => c.CodeR == code).Sum(c => c.Mablagh);
int? MAB = R.Value + q1.Baghi;
mablagh.Text = MAB.Value.ToString();
var C = db.tbl_Driver.Where(c => c.CodeR == code).Select(c => c.Comis).Single();
double Com = C.Value * MAB.Value / 100;
ajanssode.Text = Com.ToString();
}

else
{
var R = db.tbl_tamasshowreport.Where(c => c.CodeR == code).Sum(c => c.Mablagh);
mablagh.Text =R.Value.ToString();
var C = db.tbl_Driver.Where(c => c.CodeR == code).Select(c => c.Comis).Single();
double Com = C.Value * R.Value / 100;
ajanssode.Text = Com.ToString();
}

}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}




این دستور بدون اینکه وارد else بشه مستقیم میره تو قسمت catch

alireza_s_84
جمعه 20 دی 1392, 22:36 عصر
سلام

ببخشید من دستور زیر رو مینویسم اما وارد دستور if میشه ولی وقتی شرط درست نباشه وارد دستور else نمیشه

ممنونم میشم راهنمایی کنید که مشکل کد چیه...


try
{
//var q = db.tbl_BaghiMande.Where(c => c.CodeR == code).Single();
var q1 = db.tbl_BaghiMande.FirstOrDefault(c => c.CodeR == code);

if (q1.CodeR != null)
{
var R = db.tbl_tamasshowreport.Where(c => c.CodeR == code).Sum(c => c.Mablagh);
int? MAB = R.Value + q1.Baghi;
mablagh.Text = MAB.Value.ToString();
var C = db.tbl_Driver.Where(c => c.CodeR == code).Select(c => c.Comis).Single();
double Com = C.Value * MAB.Value / 100;
ajanssode.Text = Com.ToString();
}

else
{
var R = db.tbl_tamasshowreport.Where(c => c.CodeR == code).Sum(c => c.Mablagh);
mablagh.Text =R.Value.ToString();
var C = db.tbl_Driver.Where(c => c.CodeR == code).Select(c => c.Comis).Single();
double Com = C.Value * R.Value / 100;
ajanssode.Text = Com.ToString();
}

}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}




این دستور بدون اینکه وارد else بشه مستقیم میره تو قسمت catch

وقتی خطایی صورت میگیره طبیعیه که میره به Catch شما اصلا کدت اجرا نمیشه استثنا داری ، Trace کن ببین کجا ایراد میگیره یا متن پیام رو بذار تا بچه ها راهنماییت کنن

Mansoor92
جمعه 20 دی 1392, 22:45 عصر
وقتی خطایی صورت میگیره طبیعیه که میره به Catch شما اصلا کدت اجرا نمیشه استثنا داری ، Trace کن ببین کجا ایراد میگیره یا متن پیام رو بذار تا بچه ها راهنماییت کنن

سلام

ممنونم که پاسخ دادید

آخه دستور اگر اون فیلد داخل جدول Baghi وجود داشته باشه دستور if به درستی اجرا میشه اما اگر وجود نداشته باشه مستقیم میره سراغ catch و اصلن سراغ else نمیره...

drsina
جمعه 20 دی 1392, 23:09 عصر
خب دستوراتی که می خوای حتما اجرا بشه رو توو Finally بنویس.

Mahmoud.Afrad
شنبه 21 دی 1392, 00:08 صبح
if ... else ربطی به try ... catch نداره. همونطور که گفته شده استثناء رخ میده و البته این استثناء در جایی اتفاق میفته که شما به اشتباه فکر میکنی که شرط برقرار نیست در صورتی که خود شرط خطا داره یعنی q1.CodeR != null اشتباست چون اگر q1 برابر null باشه دسترسی به پراپرتی هاش نداری. وقتی از FirstOrDefault استفاده میکنی برای اینکه بتونی بفهمی حاصلی داره یا نه خود مجموعه رو باید بررسی کنی یعنی باید ببینی q1 برابر null هست یا نه if (q1 != null)

Mansoor92
شنبه 21 دی 1392, 06:56 صبح
if ... else ربطی به try ... catch نداره. همونطور که گفته شده استثناء رخ میده و البته این استثناء در جایی اتفاق میفته که شما به اشتباه فکر میکنی که شرط برقرار نیست در صورتی که خود شرط خطا داره یعنی q1.CodeR != null اشتباست چون اگر q1 برابر null باشه دسترسی به پراپرتی هاش نداری. وقتی از FirstOrDefault استفاده میکنی برای اینکه بتونی بفهمی حاصلی داره یا نه خود مجموعه رو باید بررسی کنی یعنی باید ببینی q1 برابر null هست یا نه if (q1 != null)


سلام

واقعا ازتون ممنونم...
مشکل حل شد...