نقل قول: مشکل در جستجو C#
نقل قول:
نوشته شده توسط
marya0030
سلام خسته نباشید:قلب:
بنده یک برنامه به زبان سی شارپ و همچنین پایگاه داده اکسس درست کردم مشکل بنده در فیلدهای جستجو هست
بنده دو فیلد جستجو بر اساس
نام و فامیل دارم
هنگامی که سرچ بر اساس نام هست تمام اسامی بعنوان مثال محمد را نمایش میدهد ولی زمانی که سرچ بصورت نام فامیل صورت میگید مثل محمد احمدی سرچ درست عمل نمیکند و اسامی غیر احمد را هم در سرچ نمایش میدهد
کد جستجو بر اساس نام :
if (txtSearch.Text.Trim() != "") {
OleDbConnection con = new OleDbConnection(Connection);
//OleDbDataAdapter da = new OleDbDataAdapter("Select ID,FName,LName,PIC From info Where FName Like'%" + txtSearch.Text + "%'", con);
OleDbDataAdapter da = new OleDbDataAdapter("Select ID,FName,LName,PIC,Date1 From info Where FName Like'%" + txtSearch.Text + "%'", con);
DataSet ds = new DataSet();
da.Fill(ds);
dataGridView1.DataSource = ds.Tables[0].DefaultView;
}
else
{
BindGrid();
}
کد جستجو بر اساس فامیل
if (txtSearch2.Text.Trim() != "") {
OleDbConnection con = new OleDbConnection(Connection);
OleDbDataAdapter da = new OleDbDataAdapter("Select ID,FName,LName,PIC,Date1 From info Where LName Like'%" + txtSearch2.Text + "%'", con);
DataSet ds = new DataSet();
da.Fill(ds);
dataGridView1.DataSource = ds.Tables[0].DefaultView;
}
else
{
BindGrid();
}
من تفاوت خاصی بین کد های شما نمی بینم اما مستقیما txtSearch.Text رو آوردید داخل دستور SELECT. یعنی کاربر مجازه هر چیزی که خواست در SELECT تون درج کنه، بدون محدودیت.
یعنی عمدا یا سهوا میتونه شرط روتین SELECT شما رو به میل خودش تغییر بده یا حتی کدی رو اجرا کنه که خوشایند شما نیست.
همچین کدی مستعد SQL Injection ئه، بهتره عادت کنید که اینکار رو در هیچ کدی انجام ندید. txtSearch.Text رو بصورت پارامتر دربیارید و به عنوان پارامتری به SELECT تون اضافه کنید.
پارامتر ها علاوه بر اینکه فرمت نوشتاری رو بصورت خودکار رعایت می کنند جلوی SQL Injection رو هم میگیرند.
OleDbConnection con = new OleDbConnection(Connection);
OleDbDataAdapter da = new OleDbDataAdapter("Select ID,FName,LName,PIC,Date1 From info Where FName Like @search", con);
da.SelectCommand.Parameters.AddWithValue("@search" , "%" + txtSearch.Text + "%");
OleDbConnection con = new OleDbConnection(Connection);
OleDbDataAdapter da = new OleDbDataAdapter("Select ID,FName,LName,PIC,Date1 From info Where LName Like @search", con);
da.SelectCommand.Parameters.AddWithValue("@search" , "%" + txtSearch2.Text + "%");
نقل قول: مشکل در جستجو C#
دوست عزیز ممنون از راهنمایی کاملتون
ببینید بنده میخوام وقتی کاربر اسم شخص رو نوشت افراد را که اول اسم انها بعنوان مثال با "الف" و اول فامیل آنها با "س" است در دیتاگرید نمایش بدهد اگر کد شما این امکان را دارد ممنون میشم کاملش بگذارید چون برای من عمل نکرد
1 ضمیمه
نقل قول: مشکل در جستجو C#
ببنید این تصویر سرچ منه و اتفاقی که می افتد جستجو براساس نام و فامیل ولی فقط فامیل لحاظ شده است با کدهایی که جنابعالی دادین و البته کدهای خودم هم به این نحو است ضمیمه 151110
نقل قول: مشکل در جستجو C#
نقل قول:
نوشته شده توسط
marya0030
ببنید این تصویر سرچ منه و اتفاقی که می افتد جستجو براساس نام و فامیل ولی فقط فامیل لحاظ شده است با کدهایی که جنابعالی دادین و البته کدهای خودم هم به این نحو است
ضمیمه 151110
ایراد در LIKE نیست، ایراد در شرط WHERE ای است که می نویسید. شما دو تا فیلد رو باید در یک کوئری جستجو داشته باشید، نه دو تا SELECT مجزا.
اون if ها رو هم حذف کنید، شما با TextBox متن خالی هم می توانید همون نتیجه رو بگیرید و نیازی به بررسی خالی بودن txtSearch1.Text یا txtSearch2.Text نیست.
OleDbDataAdapter da = new OleDbDataAdapter("Select ID,FName,LName,PIC,Date1 From info Where (FName Like @fname) AND (LName Like @lname)", con);
da.SelectCommand.Parameters.AddWithValue("@fname", "%" + txtSearch.Text.Trim() + "%");
da.SelectCommand.Parameters.AddWithValue("@lname", "%" + txtSearch2.Text.Trim() + "%");
var dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
نقل قول: مشکل در جستجو C#
واقعااااااااااااااااااااا ااا ازت ممنونمممممممممممممممممممم ممممممممممممممم حل شد مشکلم خیلی خوشحالم کردی
ایشاالا از خدا هرچی میخوای بهت بده:قلب: