نقل قول نوشته شده توسط 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 + "%");