مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

تاپیک مورد نظر بسته شده است

کاربر سایت

jafar_palideh

عضویت از 1392/08/08

مشکل با متد AddDay در تاریخ شمسی

  • سه شنبه 18 مهر 1396
  • 09:14
تشکر میکنم

با سلام
من وقتی میام و داده ها رو وارد دیتابیس میکنم با AddDay تاریخهای 1396/07/31 یا مثلا 1396/08/31 سیو میشه !!!
مشکل کجاست؟

if (radioButton1.Checked == true)
                {
                    string PreventiveId = dataGridView1.CurrentRow.Cells["PreventiveId"].Value.ToString();
                    int period = Convert.ToInt32(dataGridView1.CurrentRow.Cells["PeriodDay"].Value.ToString());
                    string startDate = txtDateBegin.Text;
                    string endDate = txtDateEnd.Text;
                    CultureInfo farsiCultureInfo = new CultureInfo("fa-ir");
                    DateTime dtStart = DateTime.Parse(startDate, farsiCultureInfo);
                    DateTime dtEnd = DateTime.Parse(endDate, farsiCultureInfo);
                    sconnection = new SqlConnection();
                    sconnection.ConnectionString = PM.Properties.Settings.Default.ConPM;
                    if (sconnection.State == ConnectionState.Closed)
                    {
                        sconnection.Open();
                    }
                    for (DateTime nextdate = dtStart; nextdate <= dtEnd; nextdate = farsiCultureInfo.Calendar.AddDays(nextdate, period))
                    {
                        string Insert2 = "Insert into TblPreventiveDay values ('{0}','{1}','{2}','{3}')";
                        string nnextdate = string.Format("{0:yyyy/MM/dd}", nextdate);
                        Insert2 = string.Format(Insert2, PreventiveId, nnextdate,  0, 0);
                        Function.DoDml2(Insert2,sconnection);
                    }
                    sconnection.Close();
                    MessageBox.Show("پیشگیرانه طی دوره روزانه ایجاد شد");
  
  
                }

public static void DoDml2(string Query,SqlConnection con)
        {            
            SqlCommand cmd = new SqlCommand(Query, con);            
            cmd.ExecuteNonQuery();            
  
  
        }

پاسخ های این پرسش

تعداد پاسخ ها : 4 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • سه شنبه 18 مهر 1396
  • 10:07

چرا سمشی ذخیره میکنید ؟

میلادی ذخیره کنید و موقع نمایش تبدیل به شمسی کنید

کاربر سایت

jafar_palideh

عضویت از 1392/08/08

  • سه شنبه 18 مهر 1396
  • 10:17

اون که درست .

برای رفع مشکل حال حاضر چه کنم ؟و نخوام ازمیلادی استفاده کنم .

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • سه شنبه 18 مهر 1396
  • 10:36

من هم قبلا این مشکل رو داشتم ولی متاسفانه حل نشد

مجبور شدم اصولی عمل کنم و به صورت میلادی ذخیره کنم

کاربر سایت

jafar_palideh

عضویت از 1392/08/08

  • سه شنبه 18 مهر 1396
  • 11:37

با این روش مشکل رو حل کردم :

این متد تاریخ میلادی رو تبدیل به شمسی 

public string MiladiToShamsi(DateTime _date)
        {
            PersianCalendar pc = new PersianCalendar();
            StringBuilder sb = new StringBuilder();
            sb.Append(pc.GetYear(_date).ToString("0000"));
            sb.Append("/");
            sb.Append(pc.GetMonth(_date).ToString("00"));
            sb.Append("/");
            sb.Append(pc.GetDayOfMonth(_date).ToString("00"));
            return sb.ToString();

        }

این هم Insert به دیتابیس

 string PreventiveId = dataGridView1.CurrentRow.Cells["PreventiveId"].Value.ToString();
                    int period = Convert.ToInt32(dataGridView1.CurrentRow.Cells["PeriodDay"].Value.ToString());
                    string startDate =shamsitomiladi( txtDateBegin.Text);
                    string endDate =shamsitomiladi( txtDateEnd.Text);
                    DateTime dtStart = DateTime.Parse(startDate);
                    DateTime dtEnd = DateTime.Parse(endDate);
                    PersianCalendar pc = new PersianCalendar();                    
                    sconnection = new SqlConnection();
                    sconnection.ConnectionString = PM.Properties.Settings.Default.ConPM;
                    if (sconnection.State == ConnectionState.Closed)
                    {
                        sconnection.Open();
                    }
                    for (DateTime nextdate = dtStart; nextdate <= dtEnd; nextdate = pc.AddDays(nextdate, period))
                    {
                        string Insert2 = "Insert into TblPreventiveDay values ('{0}','{1}','{2}','{3}')";
                        string shamsi = MiladiToShamsi(nextdate);
                        Insert2 = string.Format(Insert2, PreventiveId, shamsi, 0, 0);
                        Function.DoDml2(Insert2, sconnection);
                    }
                    sconnection.Close();
                    MessageBox.Show("پیشگیرانه طی دوره روزانه ایجاد شد");

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

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

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)