PDA

View Full Version : سوال: خطای کدی که نوشتم کجاست؟



mohammad.hm
پنج شنبه 28 مرداد 1395, 21:53 عصر
private void btnJostejo_Click(object sender, EventArgs e)
{
try
{
DateTime dt = DateTime.Now;
PersianCalendar pdt = new PersianCalendar();
string strDate = pdt.GetYear(dt).ToString();
strDate += pdt.GetMonth(dt).ToString();
strDate += pdt.GetDayOfMonth(dt).ToString();


DateTime dt2 = new DateTime();
PersianCalendar Pdate = new PersianCalendar();


String strDay = pdt.GetDayOfMonth(dt2).ToString();
String strmonth = pdt.GetMonth(dt2).ToString();
String strYear = pdt.GetYear(dt2).ToString();
strDay = txtDay.Text;
strmonth = txtMonth.Text;
strYear = txtYear.Text;
String strDate2 = strYear + "/" + strmonth + "/" + strDay;
var db = new Shift_dbtDataContext();
db.ZakhireBase(strDate, cmbNS.SelectedItem.ToString(), cmbRSH.SelectedItem.ToString(), strDate2);



}
catch
{
MessageBox.Show("Error");
}

برنامه رو که اجرا میکنم پیغام ارور رو میده.

محمد آشتیانی
پنج شنبه 28 مرداد 1395, 22:32 عصر
سلام
دوست عزیزم ، لطفا بفرمائید چه اروری میده (متن خطا) و اینکه اگر مقدور هست بفرمائید چه میخواهید بکنید و نمونه ای از برنامتون رو قرار بدید.

ضمنا بخش catch رو اینجوری بنویسید تا متن خطا رو ببینید

try
{


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

reza_ali202000
جمعه 29 مرداد 1395, 00:41 صبح
دوست عزیز. زمان برنامه نویسی نباید از try catch استفاده کرد. چرا؟ چون خطاها خودشون رو نشون بدن. روی قسمتی که خطا میده برنامه متوقف میشه.
بعد از اینکه کل خطاها رو تقریبا پیدا کردید بعد از این دستور استفاده کنید.

mr.sirwan
جمعه 29 مرداد 1395, 10:41 صبح
دوست عزیز اولا تاریخی که داخل متغیر strDate هست بدون ممیزه(البته اگه عمدا اینکارو نکرده باشی)، یعنی تاریخی که تو متغیرت ذخیره میشه به این شکل هست: 13950529
دوم اینکه از ابجکت Pdate اصلا استفاده نکردی(البته این ایجاد خطا نمیکنه، فقط گفتم که بدونی)، سوم اینکه ابجکت dt2 رو فقط new کردی با اینکار مقدار پیشفرص 1/1/0001 00:00:00 داخلش قرار میگیره و در اولین کدی که بخواد این مقدار رو به شمسی تبدیل کنه به ارور میخوره، حداقل مقدار قابل تبدیل 03/21/0622 00:00:00 هستش، شما برای اینکار نباید ابجکت رو new کنی، فقط بعد از تعریف ابجکت بعد از مساوی DateTime.Now رو قرار بده

خط هایی که ایجاد خطا میکنن این سه تا هستن:
String strDay = pdt.GetDayOfMonth(dt2).ToString();
String strmonth = pdt.GetMonth(dt2).ToString();
String strYear = pdt.GetYear(dt2).ToString();
که البته برنامه در اولین خط از این سه خط کد به ارور میخوره

چهارم اینکه وقتی میای تاریخ هارو از تکست باکس میخونی، پس واسه چی محاسبه شون میکنی؟؟؟ اول اومدی محاسبه کردی گذاشتی داخل متغیرا، بعد اومدی مقدار متغیر هارو برابر خاصیت Text تکست باکس ها قرار دادی(یعنی بیهوده کاری)