PDA

View Full Version : مشکل در مقایسه دو تاریخ



setareh2013
شنبه 14 اردیبهشت 1392, 08:14 صبح
با سلام
من وقتی داخل فرم دو تاریخ رو به صورت زیر مقایسه می کنم مشکلی ندارم :

DateTime dt1 =Convert.ToDateTime( maskedTextBox1.Text); DateTime dt2 = Convert.ToDateTime(maskedTextBox2.Text); if (dt1>dt2) label1.Text = "تاریخ اولی"; else label1.Text = "تاریخ 2"; label2.Text = (dt1 - dt2).ToString(); ولی وقتی تاریخ ها رو از پایگاه داده می خونم خطا میده (Conversion failed when converting the varchar value '1391/01/01' to data type int.):

publicDataTable showbetweendatas(DateTime date1,DateTime date2 ) { query = "select * from BarTB,SenderTB,GetterTB,DriverTB where sid_fk=sid and gid_fk=gid and driverid_fk=did and sodordate>="+date1+" and sodordate<="+date2+" order by bid desc"; DataTable dt = newDataTable(); ctrl.connect(); dt = ctrl.filldataadaptor(query); ctrl.disconnect(); return dt; }

باید چه کار کنم ؟

havash.link
شنبه 14 اردیبهشت 1392, 09:26 صبح
با سلام

شما برای انتخاب بین 2 تاریخ از تابع "BETWEEN" استفاده کنید
بطور مثال
SELECT @date FROM tbl WHARE @date BETWEEN @valueDate1 and @valueDate2

setareh2013
شنبه 14 اردیبهشت 1392, 13:57 عصر
با سلام

شما برای انتخاب بین 2 تاریخ از تابع "BETWEEN" استفاده کنید
بطور مثال
SELECT @date FROM tbl WHARE @date BETWEEN @valueDate1 and @valueDate2

به صورت زیر هم نوشتم باز خطا میده که نمی تونه string رو به int تبدیل کنه .

// //query = "select * from BarTB where sodordate BETWEEN "+date1+" and "+date2+" order by bid desc";

روشی که شما گفتید در حالت stored procedure جواب گرفتم ولی به روش خودم که کد رو داخل C#‎‎‎ فقط می نویسم خطا میده .

setareh2013
یک شنبه 15 اردیبهشت 1392, 06:42 صبح
کسی نمی تونه راهنماییم کنه ؟

gwbasic
یک شنبه 15 اردیبهشت 1392, 07:05 صبح
ببینید تاریخ در database به صورت میلادی هست در صورتیکه شما شمسی تعریف کردین البته نمیدونم از DataTime در سمت DataBase استفاده کردین یا varchar. خطایی که نشون دادین بطور واضح می گه که نمی تونه varchar رو به int تبدیل کنه. یه راه اینه که (البته اگر ساعت مهم نیست و فقط به تاریخ نیاز دارین) تاریخ رو به صورت عدد 8 رقمی در database ذخیره کنید مثلا 13920214 به این شکل مشکلی در کوئری زدن در database برای یک بازه زمانی نخواهید داشت.
در هر صورت قبل از اینکه سمت سی شارپ کدنویسی کنید اول کوئری تون رو در sql اجرا کنید بعد بیان سراغ سی شارپ همون کوئری رو استفاده کنید. در صورت بروز مشکل، به طور کامل توضیح بدین که از چه type ای استفاده کردین چه کوئری زدین و متن خطا چی بوده و مربوط به کدوم خط هست.
تا مشکلتون رو به طور کامل تشریح نکنید دیرتر به جواب می رسین

setareh2013
یک شنبه 15 اردیبهشت 1392, 07:13 صبح
با تشکر از شما
تاریخ رو به صورت nvarchar در پایگاه داده ذخیره کرده ام . تاریخ توسط کنترل maskedtextbox به صورت مثلا01/01/1391 وارد شده و به همین صورت هم داخل پایگاه داده ذخیره می شود .
خطا ی Conversion failed when converting the varchar value '1391/01/01' to data type int.): هم به کد اس کیو ال میده .

Mahmoud.Afrad
یک شنبه 15 اردیبهشت 1392, 07:28 صبح
مقادیر رشته ای رو باید با تک کوتیشن مشخص کنید پس دو طرف تاریخ ها تک کوتیشن نیازه. در ضمن نوع ستون تاریخ رو از نوع char یا varchar بگیرید.
"select * from BarTB where sodordate BETWEEN '" + date1 + "' and '" + date2 + "' order by bid desc"

gwbasic
یک شنبه 15 اردیبهشت 1392, 07:43 صبح
همانطور که دوست خوبم اشاره کردن باید از کوتیشن استفاده کنید و گرنه به شکل int دیده می شود. چند خط اول کدتون گمراه کننده بود بیشتر تا راهنمایی!!!(استفاده از dateTime)

havash.link
یک شنبه 15 اردیبهشت 1392, 09:44 صبح
شما وقتی متغیرتون را بصورت datetime به تابع انتقال می دین مقادیر متغیر تون بصورت کامل ( یعنی تاریخ و ساعت ) ارسال می شه ، حتی اگر شما فقط تاریخ رو به متغیر از نوع datetime وارد کنید در این صورت هم باز زمان به این متغیر اضافه می شه پس حتما باید در موقع استفاده در داخل تابع ، متغیر رو محدود به تاریخ کنین بصورت زیر :

date1.ToShortDateString()
date2.ToShortDateString()



برای روشن تر شدن بیشتر موضوع اگه از دو متغیر date1 و date2 داخل تابع خروجی بگیرین میبینین که تاریخ همراه با ساعت رو واسه شما نمایش میده.