PDA

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



sajadjamalian
سه شنبه 20 مهر 1389, 17:10 عصر
سلام دوستان:
من توی برنامه یه textbox دارم که کاربر میتونه کلمه یا جمله ای رو توی اون وارد کنه، حالا فرض کنید که کاربر جمله "علی به بازار رفت" را درون textbox بنویسد، حالا میخوام توی یه جدولی که توی sql دارم توی یکی از column های اون هر 4تا کلمه این جمله جستجو بشه، مثلا اگه "علی" بود یا "رفت" بود هم توی نتیجه کوئری نشون داده بشه، باید چی کار کنم؟ ممنون.

mmd2009
سه شنبه 20 مهر 1389, 17:26 عصر
با سلام

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



/// <summary>
/// متدی برای ارسال رشته اتصالی
/// </summary>
/// <returns>رشته اتصالی</returns>
private string ConnectionString()
{
return ("Data Source=.\\SQLEXPRESS;" +
"Initial Catalog=learn;Integrated Security=True");
}

private void button1_Click(object sender, EventArgs e)
{
SqlDataReader re;
SqlConnection con = new SqlConnection(this.ConnectionString());

string strQuery = "select name from tbl1 where name=@name";

SqlCommand cmd = new SqlCommand(strQuery, con);
con.Open();

// یک حلقه برای دریافت نام ها از جعبه متن
foreach (string MyValue in this.textBox1.Text.Split(' '))
{
cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = MyValue;
re = cmd.ExecuteReader();
if (re.Read())// اگر نام وجود داشته باشه ااسمش رو مینویسیم
{
this.Text += MyValue + "//";
}
re.Close();
cmd.Parameters.Clear();
}

con.Close();
}


موفق باشید

sajadjamalian
سه شنبه 20 مهر 1389, 17:38 عصر
ممنون mmd2009:
این کدی که شما نوشتی جمله رو تکه تکه میکنه و دنبال هر کدوم از کلماتش میگرده،آیا دستور خاصی توی sql وجود نداره که چنین کاری رو انجام بده؟
بازم ممنون از توجهت.:چشمک:

mmd2009
سه شنبه 20 مهر 1389, 17:53 عصر
تا جایی که من میدونم به طور مستقیم نمیشه با کوئری چنین کاری رو کرد و تابع خاصی براش نوشت

موفق باشید

morteza271
سه شنبه 20 مهر 1389, 18:43 عصر
فکر کنم روشی که میگم براتون مفید باشه!
اول جمله ی داخل textbox رو تکه تکه کنید یعنی با تابع Split کلمه هاشو جدا کنید و در یک آرایه نگه دارید بعد این کوئری رو بنویسید:

select *
from tablename
where name like '%arr[0]%arr[1]%arr[2]%';احتمالا جواب بده،تست کنید ضرر نداره!!!
در اینجا arr اسم ارایه ای است که کلمه های جمله در اون قرار دادیم...
موفق باشید

ali.rezaei7
سه شنبه 20 مهر 1389, 23:20 عصر
سلام اینم می تونه روش خوب و ساده ای باشه.

String Query="SELECT fileds FROM table WHERE fieldname IN('"+textbox1.text.Replace(" ","',")+"')"