PDA

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



pure_love
سه شنبه 11 آذر 1399, 11:15 صبح
سلام بچه ها
من میخواهم در پروژم بین دو تاریخ چستجو کنم ، کدم اینه :

SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=amval;Integrated Security=True");
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter("select * from insertamval where date>= @n AND date<= @m", con);
da.SelectCommand.Parameters.AddWithValue("@n", "%" + textBox1.Text + "%");
da.SelectCommand.Parameters.AddWithValue("@m", "%" + textBox2.Text + "%");
da.Fill(ds, "t1");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "t1";


ولی پیغام زیر میده :
152563

لطفا راهنمایی کنید چیکار کنم ؟

محمد رضا فاتحی
سه شنبه 11 آذر 1399, 11:47 صبح
سلام از between استفاده کنید

select * from tbl where date between '1399/09/01' and '1399/09/30'

pure_love
سه شنبه 11 آذر 1399, 15:25 عصر
سلام از between استفاده کنید

select * from tbl where date between '1399/09/01' and '1399/09/30'



بازم نشد :
152564

Mahmoud Zaad
سه شنبه 11 آذر 1399, 15:54 عصر
سلام
توی این کوئری، وقتی دارید پارامترها رو مقداردهی میکنید به علامت % نیاز نیست
ضمن اینکه دیتاتیبل t1 کجا هست و چطور تعریف شده؟

pure_love
چهارشنبه 12 آذر 1399, 09:04 صبح
سلام
توی این کوئری، وقتی دارید پارامترها رو مقداردهی میکنید به علامت % نیاز نیست
ضمن اینکه دیتاتیبل t1 کجا هست و چطور تعریف شده؟

بازم پیغام میده :

152565

محمد رضا فاتحی
چهارشنبه 12 آذر 1399, 09:38 صبح
نحوه مقدار دهی پارامترتون اشتباه
da.Sele.........("n",textBox1.Text);
هر چند خطایی که داره میده مربوط به اینه که دارین یه رشته رو با پارامتر بزرگتر مساوی چک می کنید، ولی جالب اینه که تو کوئریتون نیست!!

voice.of.silence
جمعه 14 آذر 1399, 07:49 صبح
سلام.
من از این دستور sql استفاده می کنم و خوب کار می کنه.
با استفاده از entity framework.
Create proc SP_GetUserEnterAndExitDateTimeByDetails
@FullName nvarchar(128),
@ComputerName nvarchar(128),
@IpAddress nvarchar(128),
@FromDate nvarchar(128),
@ToDate nvarchar(128)

With encryption
As
Begin
Select * from VW_UserEnterAndExitLog
Where convert(nvarchar(128), EnterDateTime, 126) between @FromDate and @ToDate
and ComputerName like '%' + @ComputerName + '%'
and IpAddress like '%' + @IpAddress + '%'
and FullName like '%' + @FullName + '%'
End
go

mr.sirwan
جمعه 14 آذر 1399, 12:23 عصر
خیلی وقته با Ado کار نکردم ولی فک کنم توی کوئری برای پارامتر های رشته ای باید اون پارامتر رو بین دوتا کوتیشن قرار میدادیم، یعنی کوئری باید به این شکل باشه:
"select * from insertamval where date>= '@n' AND date<= '@m'"

pure_love
شنبه 15 آذر 1399, 07:29 صبح
خیلی وقته با Ado کار نکردم ولی فک کنم توی کوئری برای پارامتر های رشته ای باید اون پارامتر رو بین دوتا کوتیشن قرار میدادیم، یعنی کوئری باید به این شکل باشه:
"select * from insertamval where date>= '@n' AND date<= '@m'"



بازم همون پیغام میده

pure_love
شنبه 15 آذر 1399, 07:30 صبح
سلام.
من از این دستور sql استفاده می کنم و خوب کار می کنه.
با استفاده از entity framework.
Create proc SP_GetUserEnterAndExitDateTimeByDetails
@FullName nvarchar(128),
@ComputerName nvarchar(128),
@IpAddress nvarchar(128),
@FromDate nvarchar(128),
@ToDate nvarchar(128)

With encryption
As
Begin
Select * from VW_UserEnterAndExitLog
Where convert(nvarchar(128), EnterDateTime, 126) between @FromDate and @ToDate
and ComputerName like '%' + @ComputerName + '%'
and IpAddress like '%' + @IpAddress + '%'
and FullName like '%' + @FullName + '%'
End
go

دوست عزیز من با sql ننوشتم ، لطفا کد سی شارپ بگین

pure_love
شنبه 15 آذر 1399, 07:32 صبح
نحوه مقدار دهی پارامترتون اشتباه
da.Sele.........("n",textBox1.Text);
هر چند خطایی که داره میده مربوط به اینه که دارین یه رشته رو با پارامتر بزرگتر مساوی چک می کنید، ولی جالب اینه که تو کوئریتون نیست!!

بازم همین پیغام میده

M.sheaikhzadeh
شنبه 15 آذر 1399, 14:32 عصر
یه روش غیر اصولی! :قهقهه: که میتونی برای مقایسه دو تاریخ استفاده کنی اینه که تاریخ اول و دوم رو عدد تبدیل کنیم.
تاریخ اول : 1399/01/01 ==>13990101
تاریخ دوم : 1399/01/31 ==>13990131
ایتم مورد نظر در تاریخ 1399/01/04 ==> 13990104

string date1 = "1399/01/01";
string date2 = "1399/01/31";
string date = "1399/01/04";

if (Convert.ToInt32(date.Replace("/", "")) <= Convert.ToInt32(date1.Replace("/", ""))
|| Convert.ToInt32(date.Replace("/", "")) >= Convert.ToInt32(date1.Replace("/", "")))
{
MessageBox.Show("date is in range !");
}
else
{
MessageBox.Show("date is Not in range !");
}

Mahmoud.Afrad
یک شنبه 16 آذر 1399, 04:04 صبح
اسم ستونی که انتخاب کردید (date) کلمه رزرو شده هست. در این صورت اسم ستون را بین [ ] قرار بدید.