PDA

View Full Version : سوال: عدم نمایش تاریخ دقیق به هنگام جستجو



mahan0o0
شنبه 15 فروردین 1394, 16:42 عصر
سلام دوستان
من یک فرم جستجو در winform دارم که اگه کاربر اطلاعاتشو بزنه جستجو رو انجام می ده و به صورت ترکیبی نیز جستجو می کند. ولی واسه تاریخ اگه کاربر بخواد تاریخ تولدشو بزنه تا اطلاعاتش بیاد در صورتی که از < با > در query استفاده کنم تمامی تاریخهای کوچکتر یا بزرگتر رو توی gv به کاربر نمایش میده ولی هنگامی که از مساوی استفاده می کنم تا فقط تاریخی که کاربر وارد می کنه رو نشون بده هیچ اطلاعاتی رو توی gv نمایش نمیده نمیدونم مشکلش چیه. میخوام فقط تاریخی که کاربر وارد میکنه رو بیاره ولی نمیاد لطفا راهنمایی کنید کدم هم رو می زارم ممنون.



da = new SqlDataAdapter("Select * from tblusr where fname like @name BDate > @date1" , con);
string nam = ""+textBox1.Text+"%";
da.SelectCommand.Parameters.AddWithValue("@Name", nam);
string date1 = "" + maskedTextBox1.Text + "";
da.SelectCommand.Parameters.AddWithValue("@bdate", date1);

Rejnev
شنبه 15 فروردین 1394, 16:56 عصر
نوع فیلد تاریخ رو DateTime گرفتین؟

am_al_59
شنبه 15 فروردین 1394, 16:56 عصر
اون به خاطر اینه که شما در دیتابیست تاریخ رو با ساعت ذخیره کردی یا وقتی تاریخ رو میگیری ساعت هم بهش اضافه میشه قسمت ساعت رو از هر دو طرف حذف کن بعد مقایسه کن


CONVERT(DATETIME, CONVERT(NVARCHAR,ISNULL(متغیر تاریخ,GETDATE()), 111))


جناب rejnev ببخشید من وقتی پست زدم پست شمارو ندیدم شما دقیقاً درست فرمودین
امیدوارم مرا عفو کنید

mahan0o0
شنبه 15 فروردین 1394, 19:19 عصر
اون به خاطر اینه که شما در دیتابیست تاریخ رو با ساعت ذخیره کردی یا وقتی تاریخ رو میگیری ساعت هم بهش اضافه میشه قسمت ساعت رو از هر دو طرف حذف کن بعد مقایسه کن


CONVERT(DATETIME, CONVERT(NVARCHAR,ISNULL(متغیر تاریخ,GETDATE()), 111))


جناب rejnev ببخشید من وقتی پست زدم پست شمارو ندیدم شما دقیقاً درست فرمودین
امیدوارم مرا عفو کنید
تاربخ رو از نوع date تنها هم میگیرم همین مشکل رو داره تاربخ رو شمسی از کاربر میگیرم توی دیتابیس به صورت میلادی از نوع datetime ذخیره میشه و باز با یه فانکشن و یک view به شمسی تبدیل میکنم تا برای جستجو کاربر توی gv تاریخ رو شمسی ببینه. نوع داده رو هم حتما باید datetime بزارم وگرنه اگه رشته ای میگرفت مشکلی نداشتم ولی نمیدونم چرا مساوی که قرار میدم نمیاره شما فرمودید رفتم از نوع DATE خالی تبدیلش کردم ولی مشکل همچنان باقی است.با SQL 2005 کار میکنم ولی الان رو 2008 هم با DATE خالی امتحان کردم جواب نداد تازه وقتی توی sql نبدیل به شمسی دوباره میکنم فقط تاریخ رو برمیگردونه. مشکل از کجاست به نظرتون؟

Rejnev
شنبه 15 فروردین 1394, 20:35 عصر
شما باید هر دو تاریخ رو به Date، کست (Cast) کنید. با این کار فقط تاریخ چک میشه و از مقایسه ساعت و دقیقه و ثانیه و میلی ثانیه جلوگیری میکنیم.
به این مثال توجه کنید:


declare @date datetime;
set @date=getdate(); --set this from C#


select
cast(getdate() as date),
case
when cast(@date AS date) = cast(GETDATE() as DATE)
then
'equal'
else
'not equal'
end

و خروجی:
130020

mahan0o0
شنبه 15 فروردین 1394, 21:24 عصر
شما باید هر دو تاریخ رو به Date، کست (Cast) کنید. با این کار فقط تاریخ چک میشه و از مقایسه ساعت و دقیقه و ثانیه و میلی ثانیه جلوگیری میکنیم.
به این مثال توجه کنید:


declare @date datetime;
set @date=getdate(); --set this from C#‎‎‎‎


select
cast(getdate() as date),
case
when cast(@date AS date) = cast(GETDATE() as DATE)
then
'equal'
else
'not equal'
end

و خروجی:
130020

آخه الان که date تنها هم هست و همه جا توی دیتابیس هم فقط تاریخ ثبت شده بازم جواب نمیده می شه خواهش کنم واسه کدی که گذاشتم دستورشو واسم بگید چیه. الان این کدی که گذاشتیدو نمیدونم برای جستجو چطور اعمال کنم ممنون میشم کمک کنید

am_al_59
شنبه 15 فروردین 1394, 21:47 عصر
da = new SqlDataAdapter("Select * from tblusr where fname like @name CONVERT(DATETIME, CONVERT(NVARCHAR,ISNULL(BDate,GETDATE()), 111)) = CONVERT(DATETIME, CONVERT(NVARCHAR,ISNULL('@date1',GETDATE()), 111))", con);
string nam = "" + textBox1.Text + "%";
da.SelectCommand.Parameters.AddWithValue("@Name", nam);
string date1 = "" + maskedTextBox1.Text + "";
da.SelectCommand.Parameters.AddWithValue("@bdate", date1);


درضمن تو کدت هم اشتباه داری گفتم شاید اینجا زدی منم دقیقاً همونو زدم

پارامتری که پاس دادی @bdate هست اما متغیری که کنترل کردی @date1 هست
اینا دوتاش اسماشون باید یکی باشه یا اینو عوض کن یا اونو