PDA

View Full Version : مشکل در جستجو C#



marya0030
دوشنبه 18 آذر 1398, 22:02 عصر
سلام خسته نباشید:قلب:

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

بنده دو فیلد جستجو بر اساس

نام و فامیل دارم

هنگامی که سرچ بر اساس نام هست تمام اسامی بعنوان مثال محمد را نمایش میدهد ولی زمانی که سرچ بصورت نام فامیل صورت میگید مثل محمد احمدی سرچ درست عمل نمیکند و اسامی غیر احمد را هم در سرچ نمایش میدهد

کد جستجو بر اساس نام :

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();
}

the king
دوشنبه 18 آذر 1398, 23:19 عصر
سلام خسته نباشید:قلب:

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

بنده دو فیلد جستجو بر اساس

نام و فامیل دارم

هنگامی که سرچ بر اساس نام هست تمام اسامی بعنوان مثال محمد را نمایش میدهد ولی زمانی که سرچ بصورت نام فامیل صورت میگید مثل محمد احمدی سرچ درست عمل نمیکند و اسامی غیر احمد را هم در سرچ نمایش میدهد

کد جستجو بر اساس نام :

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 + "%");

marya0030
سه شنبه 19 آذر 1398, 18:54 عصر
دوست عزیز ممنون از راهنمایی کاملتون

ببینید بنده میخوام وقتی کاربر اسم شخص رو نوشت افراد را که اول اسم انها بعنوان مثال با "الف" و اول فامیل آنها با "س" است در دیتاگرید نمایش بدهد اگر کد شما این امکان را دارد ممنون میشم کاملش بگذارید چون برای من عمل نکرد

marya0030
سه شنبه 19 آذر 1398, 19:22 عصر
ببنید این تصویر سرچ منه و اتفاقی که می افتد جستجو براساس نام و فامیل ولی فقط فامیل لحاظ شده است با کدهایی که جنابعالی دادین و البته کدهای خودم هم به این نحو است 151110

the king
سه شنبه 19 آذر 1398, 20:40 عصر
ببنید این تصویر سرچ منه و اتفاقی که می افتد جستجو براساس نام و فامیل ولی فقط فامیل لحاظ شده است با کدهایی که جنابعالی دادین و البته کدهای خودم هم به این نحو است 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;

marya0030
سه شنبه 19 آذر 1398, 22:14 عصر
واقعااااااااااااااااااااا ااا ازت ممنونمممممممممممممممممممم ممممممممممممممم حل شد مشکلم خیلی خوشحالم کردی
ایشاالا از خدا هرچی میخوای بهت بده:قلب: