PDA

View Full Version : مبتدی: تفاضل دو تاریخ



نسرین2000
دوشنبه 26 اسفند 1392, 08:00 صبح
سلام
من می خوام تعداد روزهای بین دو تاریخ رو بدست بیارم
تاریخ اول توی دیتابیسم ذخیره است با نوع دادهای date
حالا می خوام تاریخ جاری سیتم رو از این تاریخ کم کنم
با استفاده از کد زیر اول تاریخ مورد نظر رو از دیتابیس می خونم و بعد از تاریخ جاری سیستم کم می کنم ولی ارور می ده Dim objcommand As New SqlCommand
objcommand.Connection = objconnection
objcommand.CommandText = " select date_vorood from suite where guest_id=@guest_id"
objcommand.Parameters.AddWithValue("@guest_id", txtguest_id.Text)
Dim sreader As SqlDataReader
objconnection.Open()
sreader = objcommand.ExecuteReader()
objconnection.Close()
Dim a As Date
Dim i As Integer
a = System.DateTime.Today
i = DateDiff("n", a, sreader)
txtmodat_eghamat.Text = i
پیغام می ده که sreader نمی تونه به نوع داده ای date تبدیل بشه .

Naghibi
دوشنبه 26 اسفند 1392, 08:39 صبح
سلام
خب sreader از نوع SqlDataReader هست نه از نوع date. برای بدست آوردن تفاضل باید مشخص کنین فیلد تاریخsreader رو از تاریخ روز کم کنه. کد رو یکمی تغییر بدین


i = DateDiff("n", a, CDate(sreader.item("date_vorood")))

نسرین2000
دوشنبه 26 اسفند 1392, 11:04 صبح
درست نشد باز هم خطا می ده:ناراحت:

Naghibi
دوشنبه 26 اسفند 1392, 15:38 عصر
درست نشد باز هم خطا می ده:ناراحت:

باز هم همون پیغام خطا رو میده یا پیغامش عوض شده؟

lotfizadeh
دوشنبه 26 اسفند 1392, 15:52 عصر
سلام
من زیاد با vb.net کار نکردم ولی فکر کنم این ایرادات رو برنامه داره.
1. متد Read() ، آبجکت sreader فراخوانی نشده
2. بعد از فراخوانی متد Read ، کانکشن رو ببندید

محمد آشتیانی
دوشنبه 26 اسفند 1392, 17:06 عصر
سلام
به نظر میرسه شما کانکشن به دیتابیس رو زود بستی ، معماری DataReader به این شکله که به کانکشن وابسته هست ، یعنی وقتی کانکشن رو میبندی قاعدتا دیگه دیتایی هم توی DataReader موجود نیست
با توجه به این مسئله ، کد بستن کانکشن رو بیار آخر این کدایی که گذاشتی ، برای استفاده از دیتای موجود توی DataReaderباید از متد Readاستفاده کنی یا میتونی یه DataTable تعریف کنی و محتویات DataReaderرو توش بریزی و از اون استفاده کنی

یعنی بعد از اینکه DataReader رو پر کردی اینجوری میشه



Dim Table As New DataTable()
Table.Load(sreader)


اینجوری از دیتاتیبل میتونی اطلاعات رو بخونی (البته اندیس هایی که برای DataTable میزاری به کوئریت بستگی داره)



Dim DateFromDB As Date = CDate(Table.Rows(0).Item(0).ToString)



امیدوارم مفید باشه.