PDA

View Full Version : سوال: چستجوی پارامتری



mahan0o0
دوشنبه 10 فروردین 1394, 19:05 عصر
سلام
من می خواستم روی gridview جستجو انجام بدم به صورت مستقیم واسه همه فیلدها غیر تاریخ جستجو حتی ترکیبی هم میشه انجام داد ولی واسه تاریخ نمیشه تاریخ رو هم بصورت شمسی از کاربر میگیرم و چون توی sql نوع داده روdatetime معرفی کردم به میلادی توی دیتابیس ذخیره می کنم و از طریق یک view و function تبدیل میلادی به شمسی دوباره تاریخ رو به شمسی ذخیره می کنم و توی gridview به کاربر نشون میدم.امکانش هم نیست نوع داده رو تغییر بدم فقط می خوام مشکل جستجوم حل شه. و می خوام جستجوم برای بقیه مقادیر هم به صورت پارامتری باشه نه به این شکلی که من نوشتم. ممنون میشم بهم بگید کدم رو چطور باید بنویسم



private void searchbutton_Click(object sender, EventArgs e)
{
string query = "select * from personnelv where 1=1";
if (textBox1.Text == "" && textBox2.Text == "" && maskedTextBox1.Text.ToString() == " / /" )
{
MessageBox.Show("nothing found");
dataGridView1.Hide();
} else if (textBox1.Text != "" || textBox2.Text != "" || maskedTextBox1.Text.ToString() != " / /")
{
query += " and [firstName] like '" + textBox1.Text + "%' ";
query += " and [lastName] like '" + textBox2.Text + "%' ";
query += " and [BirthDate] like '" + maskedTextBox1.Text + "%' ";


می خوام جستجوم به صورت پارامتری باشه یعنی به این شکل ولی جواب نمیده لطفا راهنمایی کنید کدم چطور باشه

private void searchbutton_Click(object sender, EventArgs e)
{SqlConnection con = new SqlConnection(con string);
con.Open();
string query = "select * from usrv where 1=1";
query += " and [FName] like '" + "@fna" + "%' ";
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@fna", textBox1.Text);
dataGridView1.Show();
con.open
cmd.CommandText = SQL;
DataTable dt = new DataTable();
da.Fill(dt);
con.close();
dataGridView1.DataSource = dt;
cmd.ExecuteNonQuery();
conn.Close();

mahan0o0
سه شنبه 11 فروردین 1394, 09:35 صبح
دوستان کسی هست راهنمایی کنه زود باید انجامش بدم ممنون می شم راهنمایی کنید

En_MK
سه شنبه 11 فروردین 1394, 09:47 صبح
سلام

شما برای حل شدن مشکل تاریخ:
یک break point بذار اونجاییکه داری تاریخو به کوئریت add میکنی ببین چی پاس میدی ببین دقیقا فرمتش با اون تاریخی که حاصل کانورت میلادی به شمسیه یکسانه
مثلا دوتاش دقیقا فرمت1394/01/05 دارند؟
برای جستجوی پارامتری که نوشتید علامت % را اخر گذاشتید یعنی مثلا اگر اسم محمدرضا باشه شما حتما باید محمد را تایپ کنید تا اسامی که با محمد شروع میشن را براتون بیاره اما اگر رضا تایپ کنید هیچی نمیاره

mahan0o0
سه شنبه 11 فروردین 1394, 11:18 صبح
الان من می خوام جستجوی تاریخ رو به صورت پارامتری بنویسم اونی که خودم نوشتم جواب نمیده می خواستم اگه ممکنه دوستان اصلاحش کنن

Hamid2547
سه شنبه 11 فروردین 1394, 15:30 عصر
اگر درست متوجه شده باشم میخای تاریخ شمسی از کاربر بگیری بعد به صورت میلادی براش کوئری بنویسی، خوب تکستی که از کاربر توی maskedTextBox1.Text میگیری رو باید از طریق متد کلاس استرینگ Split کنی، بعد مقدارشو بذار توی توی یه متد از کلاس پرشن کلندر، و وقتی تاریخ میلادی رو به دست آوردی اون تاریخ میلادی رو بردار بذار توی کوئریت به عنوان پارامتر:

PersianCalendar myCal = new PersianCalendar();
DateTime mydate= myCal.ToDateTime(1394,1,12,14,56,54,55);

mahan0o0
سه شنبه 11 فروردین 1394, 16:23 عصر
اگر درست متوجه شده باشم میخای تاریخ شمسی از کاربر بگیری بعد به صورت میلادی براش کوئری بنویسی، خوب تکستی که از کاربر توی maskedTextBox1.Text میگیری رو باید از طریق متد کلاس استرینگ Split کنی، بعد مقدارشو بذار توی توی یه متد از کلاس پرشن کلندر، و وقتی تاریخ میلادی رو به دست آوردی اون تاریخ میلادی رو بردار بذار توی کوئریت به عنوان پارامتر:

PersianCalendar myCal = new PersianCalendar();
DateTime mydate= myCal.ToDateTime(1394,1,12,14,56,54,55);


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



da = new SqlDataAdapter("Select * from usrs where fname like @name AND birthNumber AND birthdate ????@date AND creditid like @idno ", conn);
da.SelectCommand.Parameters.AddWithValue("@name", string.Format("{0}%", textBox1.Text));
//da.SelectCommand.Parameters.AddWithValue("@date", string.Format("{0}",Convert.ToDateTime(maskedTextBox1.Text)));
da.SelectCommand.Parameters.AddWithValue("@idno", string.Format("{0}%", textBox4.Text));

Hamid2547
سه شنبه 11 فروردین 1394, 18:52 عصر
خوب منم همین چیزی که شما خواستی رو گفتم، ببین:


اول چون داده رو توی دیتابیس میلادی ذخیره کردی ولی میخای روی تاریخ شمسی جستجو انجام بدی باید تاریخ شمسی رو بگیری
تاریخ شمسی رو قطعه قطعه کنی هر قسمتمش رو بذاری توی این فانکشن (https://msdn.microsoft.com/en-us/library/3c1445e1%28v=vs.110%29.aspx) و تاریخ میلادی رو به دست میاری
تاریخ میلادی که به دست آوردی رو به عنوان پارامتر بذاری توی کوئریت

mahan0o0
چهارشنبه 12 فروردین 1394, 10:01 صبح
خوب منم همین چیزی که شما خواستی رو گفتم، ببین:


اول چون داده رو توی دیتابیس میلادی ذخیره کردی ولی میخای روی تاریخ شمسی جستجو انجام بدی باید تاریخ شمسی رو بگیری
تاریخ شمسی رو قطعه قطعه کنی هر قسمتمش رو بذاری توی این فانکشن (https://msdn.microsoft.com/en-us/library/3c1445e1%28v=vs.110%29.aspx) و تاریخ میلادی رو به دست میاری
تاریخ میلادی که به دست آوردی رو به عنوان پارامتر بذاری توی کوئریت



من این کار رو کردم تاریخ شمسی رو هم قطعه قطعه کردم و توی sql دوباره از طریق function getshamsidate اومدم توی یک view دوباره تاریخ رو به شمسی تبدیل کردم تا بتونم توی gridview به صورت شمسی نشونش بدم الان می خوام تاریخ شمسی که توی sql تبدیل کردم رو کاربر بتونه search کنه لطفاً اگه میدونید کدش رو واسم بنویسید ممنون میشم توی کدم هم که گذاشتم واسه فسمتی که مشکل دارم علامت ؟؟ گذاشتم ممنون میشم راهنمایی کنید فقط همین جای برنامم مشکل دارم

mahan0o0
چهارشنبه 12 فروردین 1394, 13:17 عصر
من می خوام کاربر بتونه تاریخ تولدشو رو توی یک maskedtexbox وارد کنه و اطلاعش که توی table sql ثبت شده از طریق gridview بهش نشون داده بشه مثلا من اینکار رو واسه فیلد نام و شماره ملی کردم ولی نمی دونم واسه تاریخ چطوره تاریخ هم توی جدول به این شکل ثبت شده مثلا 1366/04/08 حالا چکار کنم که اکه کاربر توی maskedtexbox تاریخ تولدشو زد بهش نشون داده بشه

da = new SqlDataAdapter("Select * from usrs where fname like @name AND birthNumber AND birthdate ????@date AND creditid like @idno ", conn);
da.SelectCommand.Parameters.AddWithValue("@name", string.Format("{0}%", textBox1.Text));//این کار میکنه
da.SelectCommand.Parameters.AddWithValue("@date", string.Format("{0}",Convert.ToDateTime(maskedTextB ox1.Text)));//ولی این نه کلا این خط نمیدونم چطور باید نوشته شه

mahan0o0
جمعه 14 فروردین 1394, 08:25 صبح
دوستان من واقعا اینجای برنامم به مشکل خوردم برنامم رو بزارم کسی کمک میکنه؟ یا حداقل بگید کدش چیه تا خودم انجامش بدم. ممنون مبشم اگه کمک کنید