PDA

View Full Version : جستچو رکورد های فارسی در sql



خرافات
پنج شنبه 15 شهریور 1386, 11:02 صبح
با سلام
با نوشتن کد زیر در vb.net نمی توانم رکوردهای فارسی را سرچ و انتخاب کنم ولی رکوردهای انگلیسی موجود در پایگاه داده هایم با همین کد انتخاب می شوند . لطفاً مرا راهنمایی کنید.
PrivateSub filldg()
If chk_keraye_entekhab_jostejo.Checked = FalseThen
If rbcodeFilm.Checked Then
cmd.CommandText = "select filmlist.filmcode,filmlist.filmname,filmlist.years ,filmlist.numbers,country.country,actorlist.actorn ame,jhanr.noe from filmlist,actorlist,jhanr,country where (filmlist.actor1code=actorlist.actorcode or filmlist.actor2code=actorlist.actorcode) and filmlist.jhanrcode=jhanr.codejhanr and filmlist.countrycode=country.codecountry order by filmlist.filmcode "
ElseIf rbActor.Checked Then
cmd.CommandText = "select filmlist.filmcode,filmlist.filmname,filmlist.years ,filmlist.numbers,country.country,actorlist.actorn ame,jhanr.noe from filmlist,actorlist,jhanr,country where (filmlist.actor1code=actorlist.actorcode or filmlist.actor2code=actorlist.actorcode) and filmlist.jhanrcode=jhanr.codejhanr and filmlist.countrycode=country.codecountry order by actorlist.actorcode "
ElseIf rbJHanr.Checked Then
cmd.CommandText = "select filmlist.filmcode,filmlist.filmname,filmlist.years ,filmlist.numbers,country.country,actorlist.actorn ame,jhanr.noe from filmlist,actorlist,jhanr,country where (filmlist.actor1code=actorlist.actorcode or filmlist.actor2code=actorlist.actorcode) and filmlist.jhanrcode=jhanr.codejhanr and filmlist.countrycode=country.codecountry order by jhanr.noe "
ElseIf rbKeshvar.Checked Then
cmd.CommandText = "select filmlist.filmcode,filmlist.filmname,filmlist.years ,filmlist.numbers,country.country,actorlist.actorn ame,jhanr.noe from filmlist,actorlist,jhanr,country where (filmlist.actor1code=actorlist.actorcode or filmlist.actor2code=actorlist.actorcode) and filmlist.jhanrcode=jhanr.codejhanr and filmlist.countrycode=country.codecountry order by country.country "
ElseIf rbSalTolid.Checked Then
cmd.CommandText = "select filmlist.filmcode,filmlist.filmname,filmlist.years ,filmlist.numbers,country.country,actorlist.actorn ame,jhanr.noe from filmlist,actorlist,jhanr,country where (filmlist.actor1code=actorlist.actorcode or filmlist.actor2code=actorlist.actorcode) and filmlist.jhanrcode=jhanr.codejhanr and filmlist.countrycode=country.codecountry order by filmlist.years "
EndIf
Else
where1 = "1=1"
If txt_keraye_entekhab_codefilm.Text.Trim <> ""And IsNumeric(txt_keraye_entekhab_codefilm.Text.Trim) Then where1 &= " and filmlist.filmcode = " & CInt(txt_keraye_entekhab_codefilm.Text.Trim)
If txt_keraye_entekhab_namefilm.Text.Trim <> ""Then where1 &= " and filmlist.filmname = " & "'" & txt_keraye_entekhab_namefilm.Text.Trim & "'"
If txt_keraye_entekhab_sal.Text.Trim <> ""And IsNumeric(txt_keraye_entekhab_sal.Text.Trim) Then where1 &= " and filmlist.years = " & CInt(txt_keraye_entekhab_sal.Text.Trim)
If cmb_keraye_entekhab_actor.Text <> "-"Then where1 &= " and actorlist.actorname = " & " '" & cmb_keraye_entekhab_actor.Text & "' "
If cmb_keraye_entekhab_keshvar.Text <> "-"Then where1 &= " and country.country = " & " '" & cmb_keraye_entekhab_keshvar.Text & "' "
If cmb_keraye_entekhab_noe.Text <> "-"Then where1 &= " and jhanr.noe = " & " '" & cmb_keraye_entekhab_noe.Text & "' "
cmd.CommandText = "select filmlist.filmcode,filmlist.filmname,filmlist.years ,filmlist.numbers,country.country,actorlist.actorn ame,jhanr.noe from filmlist,actorlist,jhanr,country where (filmlist.actor1code=actorlist.actorcode or filmlist.actor2code=actorlist.actorcode) and filmlist.jhanrcode=jhanr.codejhanr and filmlist.countrycode=country.codecountry and " & where1
EndIf
dtdg.Clear()
adp.SelectCommand = cmd
adp.Fill(dtdg)
dg_keraye_entekhab.DataSource = dtdg
EndSub

hesam_hma
جمعه 16 شهریور 1386, 00:46 صبح
با درود بر شما
دوست عزیز سعی کن یه خورده مرتب تر برنامه نویسی کنی و سعی کن برنامهایی رو که اینجا میزاری در تگ کد قرار بدی ، من که به هیچ وجه حوصله خوندن کد شما رو ندارم

choobin84
جمعه 16 شهریور 1386, 06:45 صبح
به نظرم هیچ مشکلی در کد شما وجود نداره ، احتمالا مشکی در جستجوی حرف "ک" و حرف "ی" باشه که به دو صورت وجود دارند.

خرافات
جمعه 16 شهریور 1386, 18:09 عصر
چوبین عزیز حتی برای تک حرف های فارسی به جز ک و ی نیز با مشکل مواجه هستم.

Alireza_Salehi
جمعه 16 شهریور 1386, 19:28 عصر
چوبین عزیز حتی برای تک حرف های فارسی به جز ک و ی نیز با مشکل مواجه هستم.
از CHARINDEX استفاده کن!

Barbodben
شنبه 17 شهریور 1386, 23:01 عصر
سلام

با رخصت از جناب علیرضا صالحی میخواستم جسارتا نظر بدم.

بهتره فیلداتون از نوع nvarchar باشه.

Alireza_Salehi
یک شنبه 18 شهریور 1386, 08:28 صبح
سلام

با رخصت از جناب علیرضا صالحی میخواستم جسارتا نظر بدم.

بهتره فیلداتون از نوع nvarchar باشه.

nvarchar که از واجباته!

اما فرض کنید یک جدول به صورت تصویر یک داریم، حالا کوئری های زیر و نتیجه هاشون رو ببینید:


SELECT * FROM Table_1
WHERE [Name] LIKE 'علی'

id name
----------- --------------------------------------------------
(0 row(s) affected)




SELECT * FROM Table_1
WHERE [Name] LIKE N'علی'

id name
----------- --------------------------------------------------
1 علی
(1 row(s) affected)




SELECT * FROM Table_1
WHERE [Name] LIKE N'%علی%'

id name
----------- --------------------------------------------------
1 علی
2 علی رضا
3 علیرضا
5 علیرضا صالحی
(4 row(s) affected)




SELECT * FROM Table_1
WHERE CHARINDEX('علی',[Name],1)>0

id name
----------- --------------------------------------------------
(0 row(s) affected)




SELECT * FROM Table_1
WHERE CHARINDEX(N'علی',[Name],1)>0

id name
----------- --------------------------------------------------
1 علی
2 علی رضا
3 علیرضا
5 علیرضا صالحی
(4 row(s) affected)




SELECT * FROM Table_1
WHERE PATINDEX('علی',[Name])>0

id name
----------- --------------------------------------------------
(0 row(s) affected)




SELECT * FROM Table_1
WHERE PATINDEX(N'علی',[Name])>0

id name
----------- --------------------------------------------------
1 علی
(1 row(s) affected)




SELECT * FROM Table_1
WHERE PATINDEX(N'%علی%',[Name])>0

id name
----------- --------------------------------------------------
1 علی
2 علی رضا
3 علیرضا
5 علیرضا صالحی
(4 row(s) affected)


هر کدوم که به کارتون میاد همون رو استفاده کنید. برای اجرای این کوئری ها از طریق دات نت هم فقط کافیه پارامتر های String رو از نوع SQLDbType.NVarChar پاس بدید(یعنی این طوری دیگه N لازم نداره)!

راهنمای SOUNDEX و DIFFRENCE رو هم ببینید جالبه!