PDA

View Full Version : سوال: چگونگی استفاده از دستور AND یا OR در جستجوی اطلاعات



Smoke_1110
سه شنبه 30 فروردین 1390, 15:23 عصر
سلام
یه تیبل دارم که می خوام بر اساس 5 فیلد از این تیبل بصورت تکی و اشتراکی جستجو انجام بدم این پنج فیلد عبارت است از نام دانشکده و نام رشته و نام گرایش و اسکان و تاهل (danshkadeh , reshte , gerayesh,eskan , tahol) حالا مثلا بعضی مواقع می خوام تنها بر اساس یکی از فیلدها جستجو کنم و گاهی اوقات هم براساس 4 فیلد بصورت همزمان مثلا اسامی دانشجوهای متاهل و بومی و رشته کامپوتر دانشکده فنی رو برام جستجو کنه حالا خودم ان کوئری رو نوشتم ولی این کوئری بصورت تکی کار میکنه :
SELECT * From daneshgah WHERE (danshkadeh=@danshkadeh) OR (reshte=@reshte) OR (eskan=@eskan) OR (gerayesh=@gerayesh) OR (tahol=@tahol)
با AND هم اگه بنویسم باید همه اون 5 فیلد رو انتخاب کنم دیگه جستجو محدود میشه
لطفا راهنمایی کنید

hi level hdd
سه شنبه 30 فروردین 1390, 17:12 عصر
با سلام
بیا برای هر ورودی شرط بذار و بگو اگه نا مساوی null بود اونوقت در شرط AND شرکت کن.
مثلا : اگه فیلد دانشده برابر نال نبود ، فیلد دانشکده And با کلمه دانشکده بشه و رشته مورد نظر رو با بقیه شرط ها که به صورت رشته
وارد میشه جمع کن(اگه reshte برابر null نبود با رشته قبلی جمع بشه و مقدار خودش بشه متغیر reshte که از textBox میگیری برابر باشه با
نام ستون )

rt3073
سه شنبه 30 فروردین 1390, 17:16 عصر
به اینصورت میتونی بنویسی.

string Cmd = "SELECT * FROM table1 WHERE 1=1";
if (textbox1.text != "")
Cmd = Cmd + " AND field1 = '" + textbox1.text + "'";
if (textbox2.text != "")
Cmd = Cmd + " AND field2 = '" + textbox2.text + "'";

SqlConnection c = new SqlConnection("Your Connection String");
DataTable DT = new DataTable();
SqlDataAdapter DA = new SqlDataAdapter();
DA.SelectCommand = new SqlCommand(Cmd, c);
c.Open();
DA.Fill(DT);
c.Close();

Smoke_1110
سه شنبه 30 فروردین 1390, 18:44 عصر
به اینصورت میتونی بنویسی.

string Cmd = "SELECT * FROM table1 WHERE 1=1";
if (textbox1.text != "")
Cmd = Cmd + " AND field1 = '" + textbox1.text + "'";
if (textbox2.text != "")
Cmd = Cmd + " AND field2 = '" + textbox2.text + "'";

SqlConnection c = new SqlConnection("Your Connection String");
DataTable DT = new DataTable();
SqlDataAdapter DA = new SqlDataAdapter();
DA.SelectCommand = new SqlCommand(Cmd, c);
c.Open();
DA.Fill(DT);
c.Close();


این ارور رو میده :
Keyword not supported: 'initialcatalog'.

irantopweb
سه شنبه 30 فروردین 1390, 18:52 عصر
از این کوری و دستور استفاده کن

SELECT * From daneshgah WHERE (danshkadeh=@danshkadeh or @danshkadeh = N'' ) and (reshte=@reshte or @reshte=N'') and (eskan=@eskan or @eskan=N'') and (gerayesh=@gerayesh or @gerayesh=N'') and (tahol=@tahol or @tahol=N'')

Smoke_1110
سه شنبه 30 فروردین 1390, 19:14 عصر
از این کوری و دستور استفاده کن

SELECT * From daneshgah WHERE (danshkadeh=@danshkadeh or @danshkadeh = N'' ) and (reshte=@reshte or @reshte=N'') and (eskan=@eskan or @eskan=N'') and (gerayesh=@gerayesh or @gerayesh=N'') and (tahol=@tahol or @tahol=N'')
کار نمی کنه این کوئری یعنی گرید ویو خالی میشه

irantopweb
سه شنبه 30 فروردین 1390, 19:33 عصر
امکان نداره ، یه جای کارت ایراد داره
دوباره تست کن

SELECT * From daneshgah WHERE (danshkadeh = @danshkadeh or @danshkadeh = N'' ) and (reshte=@reshte or @reshte=N'') and (eskan=@eskan or @eskan=N'') and (gerayesh=@gerayesh or @gerayesh=N'') and (tahol=@tahol or @tahol=N'').1

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

Smoke_1110
چهارشنبه 31 فروردین 1390, 01:01 صبح
امکان نداره ، یه جای کارت ایراد داره
دوباره تست کن

SELECT * From daneshgah WHERE (danshkadeh = @danshkadeh or @danshkadeh = N'' ) and (reshte=@reshte or @reshte=N'') and (eskan=@eskan or @eskan=N'') and (gerayesh=@gerayesh or @gerayesh=N'') and (tahol=@tahol or @tahol=N'').1

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

rt3073
چهارشنبه 31 فروردین 1390, 15:56 عصر
این ارور رو میده :
Keyword not supported: 'initialcatalog'.


فکر می کنم Connection stringات رو اشتباه نوشته باشی. ببین من خودم اینو تست کردم و کار می کنه:

string CMD = "SELECT * FROM DocumentTbl WHERE 1=1";
if (textBox1.Text.Trim() != "")
CMD = CMD + " AND Subject=N'" + textBox1.Text + "'";
if (textBox2.Text.Trim() != "")
CMD = CMD + " AND Description=N'" + textBox2.Text + "'";
SqlConnection C = new SqlConnection("Data source=.;initial catalog=WebTest;Trusted_Connection=yes;");
DataTable DT = new DataTable();
SqlDataAdapter DA = new SqlDataAdapter(CMD, C);
C.Open();
DA.Fill(DT);
C.Close();
dataGridView1.DataSource = DT;