PDA

View Full Version : مشکل جستجو بین دو تاریخ در سی شارپ



pure_love
دوشنبه 06 خرداد 1398, 20:10 عصر
سلام بچه ها من میخام بین دوتا تاریخ جستجو کنم و نتیجه رو درون دیتاگرید ویو بریزم

ولی برنامم این پیغام میده ( در ضمن درون sql نوع date بصورت text گذاشتم) :

150254

لطفا بگید چیکارش کنم درست شه؟
مرسی

ali_md110
سه شنبه 07 خرداد 1398, 00:27 صبح
اپراتور between جهت جستجوی دو تاریخ میلادی کاردبرد دارد نه شمسی و و وردی باید یک تاریخ باشد نه رشته یا استرینگ
شما ورودی هاتون بصورت رشته هست نه یک تاریخ معتبر

علی فتحی
سه شنبه 07 خرداد 1398, 00:49 صبح
درصورتی تاریخ شمسی رشته و 10 رقم باشه مثلا 01/01/1398 مشکلی نداره روش شما جواب میده .

ds = new DataSet(); SqlDataAdapter ad = new SqlDataAdapter("SELECT * FROM Table5 WHERE date BETWEEN @sdate AND @edate", con);
ad.SelectCommand.Parameters.AddWithValue("@sdate", maskedBox2.Text);
ad.SelectCommand.Parameters.AddWithValue("@edate", maskedBox3.Text);
ad.Fill(ds, "Table2");

pure_love
سه شنبه 07 خرداد 1398, 07:51 صبح
اپراتور between جهت جستجوی دو تاریخ میلادی کاردبرد دارد نه شمسی و و وردی باید یک تاریخ باشد نه رشته یا استرینگ
شما ورودی هاتون بصورت رشته هست نه یک تاریخ معتبر

الان باید چیکار کنم دوست عزیز ؟

ali_md110
سه شنبه 07 خرداد 1398, 14:41 عصر
الان باید چیکار کنم دوست عزیز ؟
فیلد تاریخ را در دیتابیس از نوع date قرار بدید و تاریخ هم بصورت میلادی ذخیره کنید
جهت جستجو تاریخ ورودی که از textbox میگیرید تبدیل به میلادی کنید و پاس بدید به select



var miladi1=textbox10.text.ToMiladi()
ad.SelectCommand.Parameters.AddWithValue("@sdate", miladi1);

این .ToMiladi() یک اکستنشن متد هست بر روی رشته ها
میتونید خودتون هم بنویسید


public static ToMiladi(this string str)
{
......کدهای تبدیل str به میلادی

}

یا میتونید بدون تبدیل کردن از کالچرها هم استفاده کنید و نیاز به متد اضافی ToMiladi()نیست
در ضمن مثل دوستمون جناب فتحی از پارامترها( sdate@)در دستورات استفاده کنید بجای نام بردن کنترل مثل textbox