PDA

View Full Version : جستجو گر سایت با استفاده از LIKE



fereshte22
پنج شنبه 27 اردیبهشت 1386, 13:48 عصر
سلام
من در فروشگاه خودم میخواهم یک جستجو گر داشته باشم که وقتی کاربر کلمه مورد نظرخود را در یک textbox وارد کرد جستجو بر اساس تمام فیلد های جدول انجام شود.من از دستور زیر برای این جستجو استفاده کردم.(که البته با or این جستجو را بر اساس همه فیلدهاانجام میدهم)


"SELECT * FROM kala WHERE Name LIKE '% %' "

من میخواهم بین % %مقدار textbox قرار بگیرد ولی نمیدونم که چه طوری مقدار textbox را در این کوری قرار بدم تا جستجو را بر اساس اون انجام بدهد.چون توی مطالبی که من در مورد این دستوردیدم همیشه حروف بین % % گرفته بود.

ealireza
پنج شنبه 27 اردیبهشت 1386, 14:09 عصر
سلام
من در فروشگاه خودم میخواهم یک جستجو گر داشته باشم که وقتی کاربر کلمه مورد نظرخود را در یک textbox وارد کرد جستجو بر اساس تمام فیلد های جدول انجام شود.من از دستور زیر برای این جستجو استفاده کردم.(که البته با or این جستجو را بر اساس همه فیلدهاانجام میدهم)


"SELECT * FROM kala WHERE Name LIKE '% %' "
من میخواهم بین % %مقدار textbox قرار بگیرد ولی نمیدونم که چه طوری مقدار textbox را در این کوری قرار بدم تا جستجو را بر اساس اون انجام بدهد.چون توی مطالبی که من در مورد این دستوردیدم همیشه حروف بین % % گرفته بود.
سلام
بهتره از پارامتر استفاده کنی!


"SELECT * FROM kala WHERE Name LIKE @search "
نهایتا هم مقدار میدی بهش !!


Dim P As SqlParameters
P = Cmd.Parameters.Add ("@search",SqlDbtype.Ntext)
P.Value = "%" & textbox1.text & "%"
Cmd.executeREader
شاید دستوری که دادم غلط املایی داشته باشه خودت دیگه درستش کن

موفق باشید

fereshte22
پنج شنبه 27 اردیبهشت 1386, 22:55 عصر
سلام
من همون طوری که دوستان راهنمایی کردند به صورت زیر عمل کردم


con.Open()
strsql = "SELECT * FROM kala WHERE Name LIKE @search "
Dim P As SqlParameter
P = cmd.Parameters.Add("@search", Data.SqlDbType.NText)
P.Value = " %" & TextBox2.Text & "%"
cmd.ExecuteReader()
dr = cmd.ExecuteReader
GridView1.DataSource = dr
GridView1.DataBind()
con.Close()

ولی روی خط زیر این خطا را میدهد:Object reference not set to an instance of an object.



P = cmd.Parameters.Add("@search", Data.SqlDbType.NText)

نمیدونم مشکلش چیه؟

azmoodeh
جمعه 28 اردیبهشت 1386, 01:16 صبح
باید یه دونه SqlParameter بسازی و مقادیر رو بهش بدی و بهد به پارامترها Add کنی

Alireza_Salehi
جمعه 28 اردیبهشت 1386, 08:09 صبح
به جای ساختن یک آبجکت برای پارامتر ، اینطوری هم میشه عمل کرد:


cmd.Parameters.Add("@search", Data.SqlDbType.NText).Value = " %" & TextBox2.Text & "%"

ealireza
جمعه 28 اردیبهشت 1386, 12:38 عصر
سلام
من همون طوری که دوستان راهنمایی کردند به صورت زیر عمل کردم


con.Open()
strsql = "SELECT * FROM kala WHERE Name LIKE @search "
Dim P As SqlParameter
P = cmd.Parameters.Add("@search", Data.SqlDbType.NText)
P.Value = " %" & TextBox2.Text & "%"
cmd.ExecuteReader()
dr = cmd.ExecuteReader
GridView1.DataSource = dr
GridView1.DataBind()
con.Close()

ولی روی خط زیر این خطا را میدهد:Object reference not set to an instance of an object.



P = cmd.Parameters.Add("@search", Data.SqlDbType.NText)

نمیدونم مشکلش چیه؟
دوست من فکر کنم این کد مشکلت رو حل کنه :


con.Open()

Dim Cmd As New SqlCommand
Dim Param As SqlParameter
Dim Reader as SqlDataReader
Cmd.CommandText= "SELECT * FROM kala WHERE Name LIKE @search "
Cmd.Connection = Con

Param = cmd.Parameters.Add("@search", Data.SqlDbType.NText)
Param.Value = " %" & TextBox2.Text & "%"
Reader = cmd.ExecuteReader()

GridView1.DataSource = Reader
GridView1.DataBind()

con.Close()


در ضمن یادت باشه که حتما SQLClient رو اینپورت کن !


imports System.Data.SqlClient


قبل از شروع شدن کلاست


امیدوارم مشکلت حل شه
موفق باشید

fereshte22
جمعه 28 اردیبهشت 1386, 14:15 عصر
سلام
از راهنمایی همه دوستان ممنون هستم.
کدی که دوستمون ealireza گذاشته بودند خطایی نداشت ولی چیزی راهم بر نمیگردوند.
دستور زیر


cmd.Parameters.Add("@search", Data.SqlDbType.NText).Value = " %" & TextBox2.Text

هم همون خطای قبلی را میداد ولی در نهایت با راهنمایی یکی از دوستان مشکلم با کد زیر حل شد


Dim strlike As String
strlike = "%" & TextBox2.Text & "%"
strsql = "Select * from kala where name like '" & strlike & "' or tosif like '" & strlike & "'"
cmd = New SqlCommand(strsql, con)

بازم ممنون

ealireza
جمعه 28 اردیبهشت 1386, 14:45 عصر
سلام
از راهنمایی همه دوستان ممنون هستم.
کدی که دوستمون ealireza گذاشته بودند خطایی نداشت ولی چیزی راهم بر نمیگردوند.
دستور زیر


cmd.Parameters.Add("@search", Data.SqlDbType.NText).Value = " %" & TextBox2.Text

هم همون خطای قبلی را میداد ولی در نهایت با راهنمایی یکی از دوستان مشکلم با کد زیر حل شد


Dim strlike As String
strlike = "%" & TextBox2.Text & "%"
strsql = "Select * from kala where name like '" & strlike & "' or tosif like '" & strlike & "'"
cmd = New SqlCommand(strsql, con)

بازم ممنون
دوست عزیز


strlike = "%" & TextBox2.Text & "%"

مشکل امنیتی داره !
در هر صورت من کد صحیح رو در ارسال قبل براتون گزاشتم

موفق باشید

fereshte22
جمعه 28 اردیبهشت 1386, 19:48 عصر
دوست عزیز ealireza همون طور که گفتم نمیدونم چرا کد شما چیزی را برنمی گردوند.در حالی که هیچ خطایی هم نداشت.در ضمن میشه بیشتر توضیح بدهید که اون کد چه مشکل امنیتی دارد؟؟

Neo Persian
جمعه 28 اردیبهشت 1386, 20:32 عصر
فکر کنم منظورشون SQL Injection هست

Behrooz_CS
شنبه 05 خرداد 1386, 14:51 عصر
برای حل کردن مشکل SQL Injection



strlike = "%" & TextBox2.Text.Replace("'","''") & "%"



در ضمن برای جستجوی سنگین باید از FullText Indexing و دستور CONTAINS استفاده کنی

Mojtaba_ss
شنبه 05 خرداد 1386, 15:17 عصر
من توی #C همیشه اینطوری می نویسمو جوابم می گیرم:



SELECT * FROM tblUsers WHERE UserName LIKE '%"+txtUserName.Text+"%'

Mojtaba_ss
شنبه 05 خرداد 1386, 15:19 عصر
اول و آخرشم یه " بزار من یادم رفت بنویسم(دابل کوتیشن)