PDA

View Full Version : جستجوی ترکیبی اما با قسمتی از نام و یا نام خانوادگی



دلتنگ اسمان
پنج شنبه 30 مرداد 1393, 11:11 صبح
با سلام
ممنون از تمامی مهندسین این سایت. خیلی از مشکلات من توی همین سایت حل شده.
یه جستجوی ترکیبی با کد زیر دارم اما این وقتی جواب میده که حداقل یکی از سه فیلد نام یا نام خانوادگی و یا نام پدر بصورت کامل وارد شود. میخوام اگر قسمتی از این سه فیلد هم وارد شد نتیجه بده. مثلا : اگر نام شخص "محمدرضا یاور دوست" و نام پدرش "علی دوست"باشد
وقتی در قسمت نام : محمد و نام خانوادگی:یاور و نام پدر: علی وارد شد تمامی افرادی که چنین کلماتی در مشخصاتشان وجود دارد را لیست کند.مثل محمدعلی یاوری فر و ... را هم نشان دهد.

string query = "SELECT * from personal WHERE 1=1 ";
if (nametxt.Text != string.Empty)
query += "AND name=@name";

if (familytxt.Text != string.Empty)
query += " AND family=@family";

if (fadertxt.Text != string.Empty)
query += " AND fadername=@fadername";

mz6488
پنج شنبه 30 مرداد 1393, 11:27 صبح
سلام.از دستور like استفاده کنید

دلتنگ اسمان
پنج شنبه 30 مرداد 1393, 11:30 صبح
دستور like رو بصورت ترکیبی نمیدونم . لطفا اگه میشه کد بذارین.

محمد آشتیانی
پنج شنبه 30 مرداد 1393, 11:44 صبح
سلام

کدی که بالا نوشتی رو به اینصورت تغییر بده

string query = "SELECT * FROM personal WHERE (1=1) AND name LIKE @name AND family LIKE @family AND fadername LIKE @fadername";

ضمنا مقادیر پارامترها رو به این صورت تنظیم کن ، برای مثال

cmd.Parameters.AddWithValue("@name", "%" + TextBox1.Text + "%");

** فرض کردم اسم رو تو TextBox1 وارد کردی

دلتنگ اسمان
پنج شنبه 30 مرداد 1393, 11:54 صبح
سلام

کدی که بالا نوشتی رو به اینصورت تغییر بده

string query = "SELECT * FROM personal WHERE (1=1) AND (name LIKE @name OR family LIKE @family OR fadername LIKE @fadername)";

ضمنا مقادیر پارامترها رو به این صورت تنظیم کن ، برای مثال

cmd.Parameters.AddWithValue("@name", "N'%" + TextBox1.Text + "%'");

** فرض کردم اسم رو تو TextBox1 وارد کردی

متاسفانه هیچ نتیجه ای نمیاره. توی این حالت حتی کامل هم وارد میکنم باز نتیجه نشون نمیده. کدها رو کمی تغییر هم دادم اما باز هم نتیجه نداد. مثلا یه بار N رو حذف کردم و بار دوم % رو از اخر کلمات حذف کردم ولی در هردو حالت هم هیچی نشون نمیده.

محمد آشتیانی
پنج شنبه 30 مرداد 1393, 12:07 عصر
این کوئری رو قبل از اینکه اینجا بنویسم تست کردم ، حتی ست کردن پارامتر رو همینطور
شما چک کن پارامترها قبل از ارسال به کوئری مقدارشون چیه (ضمن اینکه اون علامت های % برای موقعی هست که حتی اگر بخشی از رشته وارد شده مطابقت داشت نتیجه برگردونده بشه)

ضمنا اگر شما همه پارامترها رو خالی به این کوئری بفرستید ، اگر رکورد داشته باشید توی جدول ، حتما باید نتیجه برگردونده بشه

دلتنگ اسمان
پنج شنبه 30 مرداد 1393, 12:13 عصر
کل کد بنده اینه :
string query = "SELECT * FROM personal WHERE (1=1) AND (name LIKE @name OR family LIKE @family OR fadername LIKE @fadername)";

SqlCommand.Parameters.AddWithValue("@name", "N'%" + nametxt.Text.Trim() + "%'");
SqlCommand.Parameters.AddWithValue("@family", "N'%" + familytxt.Text.Trim() + "%'");
SqlCommand.Parameters.AddWithValue("@fadername", "N'%" + fadertxt.Text.Trim() + "%'");
طبق چیزی که خودتون فرمودید. اما وقتی محمد رو وارد میکنم هیچی نشون نمیده(رکورد برگشتی صفره). در صورتی که در جدولم صدها محمد وجود دارد.

محمد آشتیانی
پنج شنبه 30 مرداد 1393, 15:22 عصر
سلام

حق با شماست من تو محیط SqlServer انجام داده بودم ، بنابراین تغییراتی نیاز داشت که تو پست بالاتر اصلاح شد
اینم یه نمونه پروژه کوچیک ، امیدوارم مفید باشه.

دلتنگ اسمان
شنبه 01 شهریور 1393, 12:59 عصر
سلام

حق با شماست من تو محیط SqlServer انجام داده بودم ، بنابراین تغییراتی نیاز داشت که تو پست بالاتر اصلاح شد
اینم یه نمونه پروژه کوچیک ، امیدوارم مفید باشه.

ممنون. کد درسته. اما فکر کنم بنده مطلب رو درست مطرح نکردم.
منظورم اینکه وقتی مقادیر یک یا دو یا هر سه فیلد رو وارد کردیم و بعد دکمه جستجو رو زدیم تمامی افرادی که این مقادیر در مشخصاتشان وجود دارد رو نشون بده. دستور like در این حالت جواب نمیده.