View Full Version : سوال: جستجوی پیشرفته
mahdiyeh1
دوشنبه 06 دی 1389, 14:00 عصر
سلام دوستان من یه کتابخونه طراحی کردم میخوام بر اساس همه ی فیلدام جستجو انجام بدم ولی نیمیتونم این کارو انجام بدم
توی اجرای جستجوی تکیمم به مشکل برخوردم توی گرید ویوم همه بانکم نشون میده به جای اینکه چیزی که سرچ کردم نشون بده
میشه بهم کمک کنین مشکلم حل کنم؟؟؟؟؟؟؟؟؟؟؟؟
ironman
دوشنبه 06 دی 1389, 14:35 عصر
این کار رو باید با دستورات SQL انجام بدی.. کدی رو که نوشتی رو بزار تا بشه فهمید اشکال کار کجاست
HABIB_TANHA
دوشنبه 06 دی 1389, 17:23 عصر
سلام
اگه درست منظورت رو فهمیده باشم شاید این کمکت کنه
مشکل توی نحوه نوشتن sql string هستش
باید فیلدهایی که میخواهی نشون داده بشه داخل string تعیین کنی
(شرط)select fieldname1, fieldname2 ,... ,from tablename where
میتونی برای تک تک فیلدهات شرط جستجو تعیین کنی
مثلا
'%"+where field1 like '%"+book_textbox.text
یا چند شرط برای چند فیلد مثل زیر
('%"+where( field1 like '%"+book_textbox.text +"%' )and (field1 like '%"+id_textbox.text
امیدوارم کمکت کنه
mahdiyeh1
دوشنبه 06 دی 1389, 22:18 عصر
If TextBox1.Text <> ""Then
Session("value1") = TextBox1.Text
Session("value2") = DropDownList1
Response.Redirect("jostojo2.aspx")
EndIf
jostojo2.aspx
SqlDataSource1.SelectCommand = "select * from table1 value2.select like '%" + Session("value1") + "%'"
SqlDataSource1.DataBind()
GridView1.DataBind()
این کد مینویسم من میخوام با dropdownlist این کار انجام بدم
V0R73X
سه شنبه 07 دی 1389, 01:30 صبح
dim a as string="SELECT * FROM table1 WHERE fieldname=@fieldname"
dim con as new sqlconnection(connectionstring)
dim cmd as new sqlcommand(a,con)
cmd.parametres.addwithvalue(@fieldname",Dropdownlist1.selectedvalue)
بعدش یه Dataset رو با این دستور به کمک DataAdapter پر میکنی
gridview1.datasource=dataset1
gridview1.databind()
این کد ADO.NET که من با VB.NET مینویسم امیدوارم کمکت کنه
اگه این کمکت میکنه و فقط کد Dataset رو بلد نیستی بگو بذارم
mehrdad201
سه شنبه 07 دی 1389, 02:58 صبح
بنده پیشنهاد میکنم که از معماری 3 لایه که دوستان زیادی در موردش توضیح دادن استفاده کنی. لایه دیتابیس ، لایه منطقی و لایه اینترفیس
شما میتونید ابتدا فیلدهای سلکت شده در اینترفیس برنامه/سایت رو به لایه منطقی بسپارید. در لایه منطقی کوئری خودتون رو بسازید و اون رو به لایه دیتابیس بفرستید. اون لایه کوئری رو اجرا میکنه و نتایج رو برمیگردونه به لایه منطقی و لایه منطقی هم نتایج رو به لایه اینترفیس برنامه برمیگردونه.
حالا پیشنهاد من به شما اینه که سیستم ساخت کوئری مربوط به سرچ رو طوری طراحی کنید که منعطف باشه. یعنی چی ؟ یعنی نیاز نباشه که هی واسه هر تغییری دستکاریش کنید. چطوری؟ شما اگه کل پارامترهای ورودی رو به صورت یک ابجکت به لایه منطقی ارسال کنید دیگه نیاز نیست که براتون مهم باشه تو اون ابجکت ارسالی 3 تا فیلد هست یا 2 تا فیلد (جستجوی پیشرفته میتونه بر اساس فیلدهای مختلف یا یک فیلد باشه)
امیدوارم تونسته باشم منظورم رو کامل بیان کنم.
saman6488
سه شنبه 07 دی 1389, 09:45 صبح
ببخشید مگه میشه یه پارامتر تعریف کنیم،بعد براش بیشتر از یه پارامتر بفرستیم؟
mehrdad201
سه شنبه 07 دی 1389, 11:56 صبح
نه نمیشه یه پارامتر تعریف کنید و بعد بیشتر از یک پارامتر بفرستید. اما میتونید یک ابجکت که شامل تعدادی ایتم هست رو به عنوان یک پارامتر بفرستید.
میتونید تابع ساخت کوئری اسکیو ال رو به این صورت بنویسید که یک ابجکت (مثلا یک array) رو دریافت کنه و بر اساس تعداد ایتمها کوئری رو بسازه
فرض کنید من یک کلاس دارم به عنوان SearchItem که سه 2 پراپرتی داره. FieldName و Value
حالا من میام یک List درست میکنم که توش 2 تا ابجکت از نوع کلاس SearchItem هست. بعد در تابع سازنده کوئری میام List رو دریافت میکنم و بر اساس FieldName و Value کوئری رو میسازم و بعد اون رو ارسال میکنم به لایه DataAccess تا نتیجه رو برگردونه و من نتیجه رو ارسال کنم به لایه اینترفیس
mahdiyeh1
سه شنبه 07 دی 1389, 17:02 عصر
dim a as string="SELECT * FROM table1 WHERE fieldname=@fieldname"
dim con as new sqlconnection(connectionstring)
dim cmd as new sqlcommand(a,con)
cmd.parametres.addwithvalue(@fieldname",Dropdownlist1.selectedvalue)
بعدش یه Dataset رو با این دستور به کمک DataAdapter پر میکنی
gridview1.datasource=dataset1
gridview1.databind()
این کد ADO.NET که من با VB.NET مینویسم امیدوارم کمکت کنه
اگه این کمکت میکنه و فقط کد Dataset رو بلد نیستی بگو بذارم
اگه لطف کنی کد بذاری ممنون میشم
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.