PDA

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



maniya1
سه شنبه 02 اسفند 1390, 17:06 عصر
سلام دوستان
من در یک برنامه سی شارپ میخوام که کاربر وقتی کلید واژه(یعنی یک کلمه از یک متن )را در تکس باکس وارد کرد وقتی دکمه جستجو را کلیک کرد متنی را که این کلمه در آن بود را نمایش دهد لطفا اگر شما راهی به ذهنتون میرسه مرا راهنمایی کنید

spring69
سه شنبه 02 اسفند 1390, 18:28 عصر
سلام
ابتدا متن رو بر اساس کاراکتر فاصله اسپلیت کن و در یک لیست قرار بده. (تا اینجا متن به کلماتی تبدیل شد). بعد با شرط Contains چک کن.
اگر هر جمله رو جدا داری که لیستی از لیست ها تشکیل میدی.
اگر جمله هات همه در یک متن هست ابتدا جمله ها رو بر اساس کاراکتر نقطه جدا کن بعد بریز در یک لیست و آن لیست ها رو اسپلیت کن.
اگر متوجه نشدی یا به کارت نیومد یک مثال از صورت مسئله بزن برات کد میزارم.

shadi khanum
سه شنبه 02 اسفند 1390, 19:19 عصر
دوست عزیز سوالت ناقص.این متن ها کجاست؟ توی دیتابیس؟ تو فایل؟ اگه دیتابیس که یه Select بزن و از LIKE استفاده کن، اگه نه بگو این متن ها کجاست که میخوای توش Search انجام بدی؟

vahdani_d
سه شنبه 02 اسفند 1390, 20:16 عصر
با فرض این که از دیتابیس میخوای جستجو کنی :

select * from user where name like '%ali%'

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

maniya1
سه شنبه 02 اسفند 1390, 20:57 عصر
اول تشکر میکنم از شما دوستان به خاطره توجه شما به سواله من
بعدم بگم که متن مورد نظر من در دیتابیس هست و من متوجه شدم که باید از دستور select و عملگر Like استفاده کنم و الان مشکل من اینجاست که برنامه به کوتیشن ارور میده و کد من هم در این قسمت

SqlDataAdapter da = new SqlDataAdapter("select (Ssharh) from tblPish where (Shoze=@s) AND (Ssharh=@sh LIKE "%")",con);
که به کوتیشن ارور میده
است و در صورت تغییر به
SqlDataAdapter da = new SqlDataAdapter("select (Ssharh) from tblPish where (Shoze=@s) AND (Ssharh=@sh LIKE '%')",con);
خطایIncorrect syntax near the keyword 'LIKE'.میدهد به نظر شما باید کوتیشن ها رو چطوری قرار بدم تا درست بشه؟

vahdani_d
سه شنبه 02 اسفند 1390, 23:33 عصر
میشه لطفا بگید دنبال چه چیزی هستید ؟
توی تیبل tblPish میخواید متن داخل تکس باکس با متن داخل فیلد برابر باشه ؟ اگه منظورتون اینه که فکر میکنم از بیخ کدتون غلط باشه
بهتره به زبان فارسی همینجوری که صحبت میکنیم سوالتون که قراره دستور اس کیو ال بشه رو بیان کنید تا بهتر در موردش صحبت کنیم

saeed0935
چهارشنبه 03 اسفند 1390, 00:14 صبح
سلام اینو امتحان کن
SqlCommand objCommand = new SqlCommand();
objCommand.CommandText = "select Sshahr from tblpish where shoze like N'%"+textbox.text+"%'"

maniya1
پنج شنبه 04 اسفند 1390, 10:26 صبح
متاسفانه این کد هم ارور Incorrect syntax near the keyword 'Like'. رو میده

Hybrid
پنج شنبه 04 اسفند 1390, 10:44 صبح
سلام ، به این تکه کد که واستون نوشتم دقت کن :


OleDbDataAdapter DA= new OleDbDataAdapter();
DA.SelectCommand=new OleDbCommand();
DA.SelectCommand.Connection=my_con;
DA.SelectCommand.CommandType=CommandType.Text;
DA.SelectCommand.CommandText="Select * from tblpish where s_name like '%" + textBox1.Text.Trim() + "%'";

my_con.Open();
DataTable dt= new DataTable();
DA.Fill(dt);
dataGridView1.DataSource=dt;

my_con.Close();

کاملا تست شده و بدور از اشکاله

موفق باشید./

maniya1
پنج شنبه 04 اسفند 1390, 18:26 عصر
دوست عزیز از کدی که برام گذاشتین ممنون این کد به درستی کار کرد فقط مشکل اینجاست که کلماتی که داری حرف(ی) رو مثل کلمه (داریم) رو در هنگام سرچ نمیشناسه و برای این کلمات پس از سرچ چیزی نمایش نمیده ،شما دوستان فکر میکنید اشکال از فونتش هست یا از چیزه دیگه ای؟

Hybrid
پنج شنبه 04 اسفند 1390, 18:39 عصر
سلام ،

دوست عزیز من همین الان امتحان کردم و به درستی کار کرد.یعنی حرف مابین (ی) رو هم جستجو میکنه.

spring69
پنج شنبه 04 اسفند 1390, 19:12 عصر
سلام به این صورت بنویسید:
var DA = new OleDbDataAdapter
{
SelectCommand = new OleDbCommand
{
Connection =my_con,
CommandType = CommandType.Text,
CommandText = "Select * from tblpish where s_name like '%' + @s_name + '%'"
}
};
DA.SelectCommand.Parameters.AddWithValue("@s_name", textBox1.Text.Trim());
DA.SelectCommand.Connection.Open();
var dt = new DataTable();
DA.Fill(dt);
dataGridView1.DataSource = dt;
my_con.Close();

shadi khanum
پنج شنبه 04 اسفند 1390, 23:08 عصر
دوست عزیز کلا فارسی با دو حرف ی و ک مشکل داره چون هم کد فارسی و عربی این دو تا کاراکتر با هم فرق داره و امکان داره چیزی که تو دیتابیس هست مثلا ی عربی باشه و شما با کیبورد ی فارسی رو وارد کردی و میخوای سرچ کنی.. کلا تو پروژه هایی که فارسی زبانه بهتر که از ابتدا کلا یه تابع داشته باشی که همه ورودی ها رو (از هر کیبوردی که باشه)یکسان ذخیره کنه، یا عربی کنه و ذخیره کنه یا فراسی و اینجوری موقع سرچ هم میتونی ورودی کاربر رو به اون نوع که ذخیره کردی(فارسی یا عربی) تبدیل کنی و بعد سرچ کنی.

spring69
جمعه 05 اسفند 1390, 00:39 صبح
دوست عزیز کلا فارسی با دو حرف ی و ک مشکل داره چون هم کد فارسی و عربی این دو تا کاراکتر با هم فرق داره و امکان داره چیزی که تو دیتابیس هست مثلا ی عربی باشه و شما با کیبورد ی فارسی رو وارد کردی و میخوای سرچ کنی.. کلا تو پروژه هایی که فارسی زبانه بهتر که از ابتدا کلا یه تابع داشته باشی که همه ورودی ها رو (از هر کیبوردی که باشه)یکسان ذخیره کنه، یا عربی کنه و ذخیره کنه یا فراسی و اینجوری موقع سرچ هم میتونی ورودی کاربر رو به اون نوع که ذخیره کردی(فارسی یا عربی) تبدیل کنی و بعد سرچ کنی.
این فرمودتون درسته ولی اگر مقادیر بصورت پارامتر به کوئری ارسال بشن در اکثر موارد این مشکل پیش نمیاد. من امکان تست کامل ندارم ولی طبق تجربه کد بالا رو گذاشتم شما و اون دوست موسس تاپیک (:لبخندساده:) تست کنید.

maniya1
جمعه 05 اسفند 1390, 10:28 صبح
دوستان مشکل حل شد کافی است که در زمان ثبت و جست و جو از کد زیر در رویداد Key press استفاده کنم
if (e.KeyChar == 'ی') e.KeyChar = 'ي';

vahdani_d
شنبه 06 اسفند 1390, 00:50 صبح
سلام ، به این تکه کد که واستون نوشتم دقت کن :


OleDbDataAdapter DA= new OleDbDataAdapter();
DA.SelectCommand=new OleDbCommand();
DA.SelectCommand.Connection=my_con;
DA.SelectCommand.CommandType=CommandType.Text;
DA.SelectCommand.CommandText="Select * from tblpish where s_name like '%" + textBox1.Text.Trim() + "%'";

my_con.Open();
DataTable dt= new DataTable();
DA.Fill(dt);
dataGridView1.DataSource=dt;

my_con.Close();

کاملا تست شده و بدور از اشکاله

موفق باشید./

ممنون از کدتون یک سوال حالا اگه بخوایم نتیجه داخل دیتا گرید نمایش داده نشه و مثلا داخل لیبل نوشته و نمایش داده بشه چکار باید کرد ؟

shadi khanum
شنبه 06 اسفند 1390, 09:18 صبح
شما الان با این کد اطلاعات رو توی دیتاتیبل dt داری و هر کاری بخوای میتونی با ردیف های این دیتاتیبل (datarow) ها بکنی و میتونی یه loop روی dt.rows بزنی و ردیف به ردیف اطلاعات رو بخونی و هر جایی که میخوای نشون بدی

Hybrid
شنبه 06 اسفند 1390, 09:49 صبح
ممنون از کدتون یک سوال حالا اگه بخوایم نتیجه داخل دیتا گرید نمایش داده نشه و مثلا داخل لیبل نوشته و نمایش داده بشه چکار باید کرد ؟

به راحتی میشه اینکارو انجام داد ولی ممکنه نتیجه ی جستجو مثلا 4 تا بشه شما کدوم رو میخواین داخل لیبل نمایش بدین؟

vahdani_d
شنبه 06 اسفند 1390, 09:55 صبح
به راحتی میشه اینکارو انجام داد ولی ممکنه نتیجه ی جستجو مثلا 4 تا بشه شما کدوم رو میخواین داخل لیبل نمایش بدین؟

پس بهترین راه برای نمایش اطلاعات دیتابیس همین گرید ویو هست درسته ؟
اما فرض کنیم فقط یک خروجی داشته باشیم مثلا براساس کلید اصلی که تکرار نداره جستجو کنیم و اطلاعات بخوایم در یک لیبل نمایش داده بشه ؟

Hybrid
شنبه 06 اسفند 1390, 10:11 صبح
1 ) آره

2 )اول یک Label رو فرمت قرار بده بعد این خط رو بعد از Da.fill کپی کن و نتیجه رو مشاهده کن :


label1.Text = dt.Rows[0][1].ToString();

موفق باشید.

parand60
شنبه 06 اسفند 1390, 13:08 عصر
بله اشکال در فونت هستش