PDA

View Full Version : درخواست کد جستجو دقیق تر برای سی شارپ



pure_love
دوشنبه 18 تیر 1397, 14:36 عصر
سلام بچه ها من یه برنامه نوشتم که قسمت مهم این برنامه جستجو است !
کد جستجو من اینه :

SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=adel;Integrated Security=True");
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter("select * from kharid where name like @n", con);
da.SelectCommand.Parameters.AddWithValue("@n", textBox13.Text + "%");
da.Fill(ds, "t1");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "t1";


جستجو هم انجام میده و درون دیتاگریدویو نمایش میده ، ولی دقیق نیست ! بعضی وقت ها درست جستجو نمیکنه یا کالای مورد نظر که تایپ میکنم جستجوش نمیکنه و پیدا نمیکنه و....
خلاصه دقیق نیست !
میخاستم ببنیم کسی کد جستجو دیگه ای داره که قوی تر و دقیق تر باشه ؟
تشکر

رامین مرادی
سه شنبه 19 تیر 1397, 08:04 صبح
سلام. اینجوری بنویسید ببنید مد نظرتون هست یا نه. عمگر لایک مشابه رو میاره. مخصوصا که شما علامت درصد رو انتها گذاشتید فقط کلماتی رو پیدا میکنه که اول اسمشون شبیه باشه.برا نتایج بیشتر یه درصد هم به اول اضافه کنیم.

SqlDataAdapter da = new SqlDataAdapter("select * from kharid where name like @n", con);
da.SelectCommand.Parameters.AddWithValue("@n", "N'%"+textBox13.Text + "'%");

pure_love
سه شنبه 19 تیر 1397, 10:56 صبح
سلام. اینجوری بنویسید ببنید مد نظرتون هست یا نه. عمگر لایک مشابه رو میاره. مخصوصا که شما علامت درصد رو انتها گذاشتید فقط کلماتی رو پیدا میکنه که اول اسمشون شبیه باشه.برا نتایج بیشتر یه درصد هم به اول اضافه کنیم.

SqlDataAdapter da = newSqlDataAdapter("select * from kharid where name like @n", con);
da.SelectCommand.Parameters.AddWithValue("@n", "N'%"+textBox13.Text + "'%");



بجز like چه چیزی میشه گذاشت که قوی تر و دقیق تر باشه؟

رامین مرادی
سه شنبه 19 تیر 1397, 11:24 صبح
= باید بزارید. اونموقع نمیتونید از % استفاده کنید. و عین کلمه ای که تایپ میکنید براتون میاره

mr.sirwan
سه شنبه 19 تیر 1397, 12:23 عصر
با توجه به اینکه کوئری دوستمون اغای مرادی انگار بازم براتون مورد انتظار کار نکرده و همچنان دنبال کوئری (به قول خودتون قوی) دیگه ای میگردین (غیر از like با دوتا علامت درصد دیگه کوئری سرچ دیگه ای وجود نداره، مگر همون عملگر تساوی)، بنده احتمال میدم شما با حروف ی و ک داخل کلمات ثبت شده در دیتابیس مشکل دارین که ممکنه هنوز خودتون بهش نرسیده باشید

درصورتی که حدس بنده درست باشه، درمورد حروف ک و ی عربی در sql جستجو کنین

pure_love
سه شنبه 19 تیر 1397, 14:41 عصر
با توجه به اینکه کوئری دوستمون اغای مرادی انگار بازم براتون مورد انتظار کار نکرده و همچنان دنبال کوئری (به قول خودتون قوی) دیگه ای میگردین (غیر از like با دوتا علامت درصد دیگه کوئری سرچ دیگه ای وجود نداره، مگر همون عملگر تساوی)، بنده احتمال میدم شما با حروف ی و ک داخل کلمات ثبت شده در دیتابیس مشکل دارین که ممکنه هنوز خودتون بهش نرسیده باشید

درصورتی که حدس بنده درست باشه، درمورد حروف ک و ی عربی در sql جستجو کنین

عالی بود دوست عزیز واقعا ممنونممممممممم
مشکل همون ی و ک بود ! که با یدونه اسکریپت همه ی و ک های دیتابیس رو به فارسی تبدیل کردم !

ولی الان مشکلی که دارم اینه که جالب نیست من به کاربر بگم هربار اسکریپت رو باز کن تا تبدیل کنه بعد جستجو کن !

راهی هست که همون اول که کاربر میخاد داده هاشو ثبت کنه فارسی ثبت شه ! یا همون اول اتوماتیک خودش تبدیلش کنه به فارسی بعد ثبت شه ؟!

رامین مرادی
سه شنبه 19 تیر 1397, 15:02 عصر
عالی بود دوست عزیز واقعا ممنونممممممممم
مشکل همون ی و ک بود ! که با یدونه اسکریپت همه ی و ک های دیتابیس رو به فارسی تبدیل کردم !

ولی الان مشکلی که دارم اینه که جالب نیست من به کاربر بگم هربار اسکریپت رو باز کن تا تبدیل کنه بعد جستجو کن !

راهی هست که همون اول که کاربر میخاد داده هاشو ثبت کنه فارسی ثبت شه ! یا همون اول اتوماتیک خودش تبدیلش کنه به فارسی بعد ثبت شه ؟!

موقع ثبت اینجوری ثبت کن N'رامین'
اگه تو کوئری که من نوشته بودم دقت میکردید من یه N گذاشته بودم. وقتی کولیشن درست نباشه این اتفاقات میافتهخ. من عادت کردم اگه کولیشن هم درست باشه این N رو میزارم

pure_love
سه شنبه 19 تیر 1397, 15:41 عصر
موقع ثبت اینجوری ثبت کن N'رامین'
اگه تو کوئری که من نوشته بودم دقت میکردید من یه N گذاشته بودم. وقتی کولیشن درست نباشه این اتفاقات میافتهخ. من عادت کردم اگه کولیشن هم درست باشه این N رو میزارم
آها منظورتونو فهمیدم ولی کد ثبتمو چه تغییری بدم :
اینا کدای ثبتمه :

SqlConnection M = new SqlConnection("Data Source=.;Initial Catalog=adel;Integrated Security=True");
M.Open();
String s1 = string.Format("insert into anbar values('{0}',{1},{2},{3})", textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text);
SqlCommand comm = new SqlCommand(s1, M);
comm.ExecuteNonQuery();
MessageBox.Show("فاکتور فروش با موفقیت ثبت شد");
M.Close();

Mahmoud.Afrad
سه شنبه 19 تیر 1397, 21:29 عصر
یک extension method بنویسید که حروف عربی رایج را با فارسی معادل جایگزین کند و در زمان درج و آپدیت و جستجو برای مقادیر متنی استفاده کنید.

رامین مرادی
چهارشنبه 20 تیر 1397, 07:55 صبح
طبق فرمایش استاد عزیزمون آقای افراد میتونید از اکتنشن متود استفاده نمایید. برای اینکار این کلاس رو تو پروژتون کپی کنید.



public static class StringExtensions
{
public static string ArbicToPersian(this string input)
{
string re = input.Replace("ي", "ی").Replace("ك", "ک");
return re;
}
}


نکته:اولین آرگومان تابع ریپلیس ي عربی و دومین آرگومان ی فارسی هست و برای ک هم همینطور.(اینجا درست نمایش داده نمیشه)
و برای استفادش از کد زیر استفاده نمایید



txtbox1.Text.ArbicToPersian();


اینجور حروف عربی جایگزین میشه.

یا اینکه موقع اینسرت اینجوری بنویسید



SqlConnection M = new SqlConnection("Data Source=.;Initial Catalog=adel;Integrated Security=True");
M.Open();
String s1 = string.Format("insert into anbar values(N'{0}',{1},{2},{3})", textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text);
SqlCommand comm = new SqlCommand(s1, M);
comm.ExecuteNonQuery();
MessageBox.Show("فاکتور فروش با موفقیت ثبت شد");
M.Close();



اگه به اون کلمه N دقت کنید تو ورودی های رشته ای گذاشتم. خط 3.

pure_love
چهارشنبه 20 تیر 1397, 14:03 عصر
طبق فرمایش استاد عزیزمون آقای افراد میتونید از اکتنشن متود استفاده نمایید. برای اینکار این کلاس رو تو پروژتون کپی کنید.



public static class StringExtensions
{
public static string ArbicToPersian(this string input)
{
string re = input.Replace("ي", "ی").Replace("ك", "ک");
return re;
}
}


نکته:اولین آرگومان تابع ریپلیس ي عربی و دومین آرگومان ی فارسی هست و برای ک هم همینطور.(اینجا درست نمایش داده نمیشه)
و برای استفادش از کد زیر استفاده نمایید



txtbox1.Text.ArbicToPersian();


اینجور حروف عربی جایگزین میشه.

یا اینکه موقع اینسرت اینجوری بنویسید



SqlConnection M = new SqlConnection("Data Source=.;Initial Catalog=adel;Integrated Security=True");
M.Open();
String s1 = string.Format("insert into anbar values(N'{0}',{1},{2},{3})", textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text);
SqlCommand comm = new SqlCommand(s1, M);
comm.ExecuteNonQuery();
MessageBox.Show("فاکتور فروش با موفقیت ثبت شد");
M.Close();



اگه به اون کلمه N دقت کنید تو ورودی های رشته ای گذاشتم. خط 3.


عالی بود از راهنماییتون کامل مشکلم حل شد
واقعا ممنونم
این انجمن و کاربرای عزیز فعالش فوق العادن واقعا تشکر