PDA

View Full Version : کدهای جستجو



angel farahani
چهارشنبه 27 فروردین 1393, 23:19 عصر
سلام دوستان ، میخوام به وسیله فرم زیر جستجو انجام بدم ، اما نتونستم کامل کدهای مربوطه رو بنویسم ، چون سرچ ام درست کار نمی کنه و اینکه چیکارکنم در فیلدهای کمبو باکس که بر روی یک آیتم هستند و با توجه به آن مقدار در سرچ ام تاثیر می گذارند از روی اون مقدار برداشته و یک عبارت پیش فرض مثلا " انتخاب نمایید " را در کمبو بگذارم .

118069


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



private void ShopResult() {
Label1.Visible = true;
Image3.Visible = true;
String conString = ConfigurationManager.ConnectionStrings["OnlineResturansConnectionString"].ToString();
SqlConnection sqlcon = new SqlConnection(conString);
SqlCommand sqlcmd;
SqlDataAdapter da;
DataTable dt = new DataTable();
String query="";

if (name.Text != "")
query = "select * from shop where shopname LIKE @shopname";
if (ShopType.SelectedValue != null)
query = "select * from shop where shoptypeid=@shoptypeid";
if (areanum.SelectedValue != null)
query = "select * from shop where areanum=@areanum";
if (echolevel.SelectedValue != null)
query = "select * from shop where economylevel=@economylevel";
if (parkplace.SelectedValue != null)
query = "select * from shop where parkingplace=@parkingplace";
if (wifi.Checked==true)
query = "select * from shop where wifi=@wifi";
if (freeship.Checked==true)
query = "select * from shop where freeship=@freeship";

sqlcmd = new SqlCommand(query,sqlcon);
sqlcmd.Parameters.AddWithValue("@shopname", name.Text);
sqlcmd.Parameters.AddWithValue("@shoptypeid", ShopType.SelectedValue);
sqlcmd.Parameters.AddWithValue("@areanum",areanum.SelectedValue);
sqlcmd.Parameters.AddWithValue("@economylevel", echolevel.SelectedValue);
sqlcmd.Parameters.AddWithValue("@parkingplace", parkplace.SelectedValue);
sqlcmd.Parameters.AddWithValue("@wifi", wifi.Checked);
sqlcmd.Parameters.AddWithValue("@freeship", freeship.Checked);
sqlcon.Open();
da = new SqlDataAdapter(sqlcmd);
dt.Clear();
da.Fill(dt);
if (dt.Rows.Count > 0)
{
ResultGrid.DataSource=dt;
ResultGrid.DataBind();}
else
{
ResultGrid.DataBind();
notfoundLBL.Visible=true;
}
sqlcon.Close();
}

parvizwpf
پنج شنبه 28 فروردین 1393, 04:00 صبح
خب این روش برای چند فیلتری خوب نیست. اولا اگه میخوای آیتمی رو به کامبوت اضافه کنی بعد از ریختن تمام آیتمهاش بیا یه عدد آیتم از همون نوع به اولش اضافه کن. برای جستوت الان انگار چند فیلتری نداری چون تمام کوئریهات جدا نوشته شده اگه بتونی لینک LINQ بخونی و یاد بگیری بسیار بهتر این نوع جستجو رو هندل میکنی. الان باید برای چند فیلتری همه رو با هم بدی تو یه کوئری بگی اگر مثلا این آیتم انتخاب بود ک.ئری رو طبق اون فیلد بساز.

angel farahani
پنج شنبه 28 فروردین 1393, 20:32 عصر
خوب من از کد زیر استفاده کردم ولی هیچی رو در گرید نشون نمیده ، میشه بفرمایید ایراد کد چیست ؟


private void ShopSearch() {
String conString = ConfigurationManager.ConnectionStrings["OnlineResturansConnectionString"].ToString();
SqlConnection sqlcon = new SqlConnection(conString);
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand cmd = new SqlCommand();
DataTable dtAll = new DataTable();
DataTable dtResult = new DataTable();
StringBuilder command = new StringBuilder();

da = new SqlDataAdapter("select * from shop", sqlcon);
da.Fill(dtAll);
ResultGrid.DataSource = dtAll;


command.Remove(0, command.Length);


command.Append("select * from shop where ");
if (name.Text !=null)
command.Append("shopname = @shopname or ");
if (ShopType.SelectedValue !=null)
command.Append("shoptypeid = @shoptypeid or ");
if (areanum.SelectedValue !=null)
command.Append("areanum=@areanum or ");
if (echolevel.SelectedValue != null)
command.Append("economylevel=@economylevel or ");
if (parkplace.SelectedValue != null)
command.Append("parkingplace=@parkingplace or ");
if (wifi.Checked==true)
command.Append("wifi=@wifi or ");
if (freeship.Checked == true)
command.Append("freeship=@freeship and ");
command.Append("1 = 1");


cmd.CommandText = command.ToString();
cmd.Connection = sqlcon;


cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@shopname", name.Text);
cmd.Parameters.AddWithValue("@shoptypeid", ShopType.SelectedValue);
cmd.Parameters.AddWithValue("@areanum", areanum.SelectedValue);
cmd.Parameters.AddWithValue("@economylevel", echolevel.SelectedValue);
cmd.Parameters.AddWithValue("@parkingplace", parkplace.SelectedValue);
cmd.Parameters.AddWithValue("@wifi", wifi.Checked);
cmd.Parameters.AddWithValue("@freeship", freeship.Checked);


dtResult.Clear();

da = new SqlDataAdapter(cmd);
da.Fill(dtResult);
ResultGrid.DataSource = dtResult;


}

angel farahani
جمعه 29 فروردین 1393, 11:57 صبح
دوستان لطفا اگر کسی میتونه من رو راهنمایی کنه ...

aslan
جمعه 29 فروردین 1393, 14:38 عصر
سلام
تو خط 37 break point بزارید و متن command را ببرید تو sql اجرا کنید ببینید نتیجه کوئری چیه ؟

angel farahani
جمعه 29 فروردین 1393, 14:43 عصر
باشه این کار رو انجام میدم و اعلام میکنم - سپاس از شما

angel farahani
جمعه 29 فروردین 1393, 22:59 عصر
من کد command رو بردم در sql : + command {select * from shop where shopname = @shopname or shoptypeid = @shoptypeid or areanum=@areanum or economylevel=@economylevel or parkingplace=@parkingplace or 1 = 1} System.Text.StringBuilder




خطای زیر رو میده
Msg 137, Level 15, State 2, Line 1
Must declare the scalar variable "@shopname".

حالا من اینکه بین فیلدهام رو or کردم درسته یا بستگی به پروژه داره که and یا or کنم ؟

aslan
جمعه 29 فروردین 1393, 23:48 عصر
من کد command رو بردم در sql : + command {select * from shop where shopname = @shopname or shoptypeid = @shoptypeid or areanum=@areanum or economylevel=@economylevel or parkingplace=@parkingplace or 1 = 1} System.Text.StringBuilder




خطای زیر رو میده
Msg 137, Level 15, State 2, Line 1
Must declare the scalar variable "@shopname".

حالا من اینکه بین فیلدهام رو or کردم درسته یا بستگی به پروژه داره که and یا or کنم ؟

مونده به منطق برنامه تون ... ولی بنظر باید از And استفاده کنید
توکدهایی که قرار دادین تا خط 13 شما گرید ResultGrid را یکبار با کل اطلاعات جدول پر میکنین ( ؟؟؟!!!) . اگر جلوی اجرای کدهای بعد از خط 13 را بگیرین گرید اشاره شده بدرستی پر میشه یا نه ؟

angel farahani
شنبه 30 فروردین 1393, 00:01 صبح
نه فرقی نکرد . خروجی اصن نمیده

meysam99
شنبه 30 فروردین 1393, 00:48 صبح
در خط 12
ResultGrid.DataSource = dtAll;
را انجام می دهید و در خط 54
ResultGrid.DataSource = dtResult;
اولا چرا دوبار به دیتا وصل کردید و اینکه چرا بعد از اینکه وصل کردید گرید را دیتابایند نکردید که اطلاعات را نشان دهد

angel farahani
شنبه 30 فروردین 1393, 01:01 صبح
خوب الان دو آیتم رو نشون میده ولی زیاد به آنچه که من سرچ میکنم مرتبط نیست ، مثلا اسم رستوران رو میدم اصلا اون رو پیدا نمیکنه ، و هر بار که در گرید خروجی آن به صفحه بعدیش میخوام برم ، چون




ResultGrid.PageIndex = e.NewPageIndex;
ResultGrid.DataBind();

رو در رویداد PageIndexChanging نوشتم ، چیزی رو نشون نمیده

meysam99
شنبه 30 فروردین 1393, 01:09 صبح
اگه اسم رستوران رو میدهی و پیدا نمیکنه چند تا احتمال وجود داره اولینش این هست که کلا رشته کوئری نوشته شده اشتباه باشه. که این رو میتونی مستقیم خروجی کامنت رو در اس کیو ال تست کنی. بعد از اون هم میتوانی پارامتر ها را چک کنی که اشتباه نباشه. یه احتمال دیگه هم میدهم اگه فارسی سرچ میکنی به ی و ک عربی توجه کن .
و قسمت PageIndexChanging و هم اصلا متوجه نشدم که برای چی قرار دادی

angel farahani
شنبه 30 فروردین 1393, 01:18 صبح
PageIndexChanging رو قرار دادم ، چون خود گرید رو از طریق این کدهام وصل کردم یعنی به طور ویزاردی که وصل نکردم به دیتابیس ، برا همین لازم شد تو رویدادش این دو خط کد رو بزنم .

angel farahani
شنبه 30 فروردین 1393, 20:41 عصر
دوستان لطفا راهنمایی فرمایید ، من دیگه سرچ رو به صورت store procedure نوشتم اما خروجی درست و حسابی نمیده ، اینم کدهام ، در ضمن بفرمایید چطور میشه که به dropdownlist ای که به پایگاه وصل شده یک مقدار " انتخاب نمایید " براش بزاریم و این رو هم در جستجو در نظر نگیریم یعنی اینکه انتخاب نکرده و null هست ، دوستان لطفا راهنمایی کنید . ممنون میشم

create procedure sp_Search@shopname varchar(30),
@shoptypeid int,
@wifi bit,
@freeship bit,
@parkingplace tinyint,
@economylevel tinyint,
@areanum tinyint
As
Begin
select * from shop
Where(@shopname='')or (shopname like '%'+shopname+'%')
and
(@shoptypeid=null)or(shoptypeid=@shoptypeid)
and
(wifi=null)or(wifi=@wifi)
and
(freeship=null)or(freeship=@freeship)
and
(parkingplace=null)or(parkingplace=@parkingplace)
and
(economylevel=null)or(economylevel=@economylevel)
and
(areanum=null)or(areanum=@areanum)


End

angel farahani
چهارشنبه 03 اردیبهشت 1393, 20:08 عصر
خواهشا دوستان راهنمایی کنند ، خیلی وقت منتظره جواب گرفتن این کد هستم :(