PDA

View Full Version : مشکل استفاده از حروف فارسی هنگام جستجو در data bae



mohammad.ardeshiri
پنج شنبه 19 مرداد 1391, 00:43 صبح
سلام دوستان مشگلی که دارنم اینه
من یه کلاس تعریف کردم با database ام که sql server هست ارتباط داره یه تابع جستجو داره و نتیجه که یه dataView هست return میکنه

داخل کلاس یه تابع جستجو هست و مشگلم اینه که حروف انگلیسی که وارد میکنم به درستی کار میکنه و جواب میده ولی قارسی که تایپ میکنم برا جستجو خطا میده هنگام obj_Adaptre.fill(DS,"Tabel")
لطفا کمکم کنین

mousa1992
پنج شنبه 19 مرداد 1391, 01:10 صبح
کدی رو که برای جستجو نوشتید بذارید

mohammad.ardeshiri
پنج شنبه 19 مرداد 1391, 01:29 صبح
public DataView Return_View(String Find_Query) {


Obj_Adapter = new SqlDataAdapter(Find_Query , Con_Address);
Obj_DataSet.Clear();//clear kardan mohtaviate data set baraye inke agr dobar yek esm ra serch kardam dobar neshan nadahad
Obj_Adapter.Fill(Obj_DataSet, "Tabel");
Obj_DataView.Table = Obj_DataSet.Tables["Tabel"];

return Obj_DataView;

}






--------------------------------------------------------
String Query = "Select * From Tbl_EmployeSalary Where Jobe_ID='" + textBox1.Text + "' OR Jobe_Name='"+textBox1 .Text +"' OR Salary='" + textBox1.Text + "'";
D_View = Cls_ser.Return_View(Query);
dataGridView1.DataSource = D_View;


البته تو سازنده کلاس خورده کاریا مثل connection و غیره انجام شده اسم کلاسم ClS_serch هست که از Cls_ser رو ساختم

mousa1992
پنج شنبه 19 مرداد 1391, 01:35 صبح
String Query = "Select * From Tbl_EmployeSalary Where Jobe_ID=N'" + textBox1.Text + "' OR Jobe_Name=N'"+textBox1 .Text +"' OR Salary=N'" + textBox1.Text + "'";


N رو باید قبل از 'مقدار مورد نظر ' اضافه کنی ، مثل کد بالا ( البته من همینجوری N رو اضافه کردم ! فیلد هایی رو که مقادیر فارسی دارن براشون N بذار
مشکل حل نشد اطلاع بده

mohammad.ardeshiri
پنج شنبه 19 مرداد 1391, 01:42 صبح
نشد این error رو میده
Conversion failed when converting the nvarchar value 'مهندس' to data type int

mousa1992
پنج شنبه 19 مرداد 1391, 01:50 صبح
بلا پست رو ویرایش کردم ، جاهایی رو N بذار که فیلدش مقدار فارسی رو میگیره مثلا برای ID که از نوع int باید باشه نباید بذاری
فیلدهایی رو که توی دیتابیس معرفی کردید برای این سه از چه نوعی در نظر گرفتید ؟

mohammad.ardeshiri
پنج شنبه 19 مرداد 1391, 01:59 صبح
String Query = "Select * From Tbl_EmployeSalary Where Jobe_ID='" + textBox1.Text + "' OR Jobe_Name=N'" + textBox1.Text.Trim () + "' OR Salary='" + textBox1.Text + "'";
بازهمون پیغام رو میده
Conversion failed when converting the nvarchar value 'مهندس' to data type int

mousa1992
پنج شنبه 19 مرداد 1391, 02:09 صبح
برای ID , Salary از تک کوتیشن استفاده نکن ( البته اگز از نوع int هستن ) و اگه مشکل حل نشد نوع فیلدهاتون رو ذکز کنین

mohammad.ardeshiri
پنج شنبه 19 مرداد 1391, 02:19 صبح
ID int,
salary va name nvarchar(10)

الان یه وقتی فقط این دستور رو وارد کردم برای فارسیم کار کرد
String Query = "Select * From Tbl_EmployeSalary Where Jobe_Name=N'" + textBox1.Text.Trim () + "'";
ولی هنوز کاری که میخوام یعنی کد زیر انجام نشد
String Query = "Select * From Tbl_EmployeSalary Where Jobe_ID=" + textBox1.Text + " OR Jobe_Name=N'" + textBox1.Text.Trim () + "' OR Salary=" + textBox1.Text + "";

mousa1992
پنج شنبه 19 مرداد 1391, 02:23 صبح
برای salary هم از تک کوتیشن و N استفاده کن چون از نوع nvarchar هست

mohammad.ardeshiri
پنج شنبه 19 مرداد 1391, 02:27 صبح
String Query = "Select * From Tbl_EmployeSalary Where Jobe_ID=" + textBox1.Text + " OR Jobe_Name=N'" + textBox1.Text.Trim () + "' OR Salary=N'" + textBox1.Text + "'";

نشد با این error
Invalid column name 'مهندس'.

mousa1992
پنج شنبه 19 مرداد 1391, 02:41 صبح
اگه براتون ممکنه اپش کنین پروژه رو چک کنم اگه نه صبر کنین دوستان بیان کمک کنن
بمونم یا نه ؟ ( ینی اپش میکنین یا نه ؟ ) :لبخند:

mohammad.ardeshiri
پنج شنبه 19 مرداد 1391, 02:43 صبح
نشد دوباره کار نکرد با این کدم
String Query = "Select * From Tbl_EmployeSalary Where Jobe_ID=" + textBox1.Text + " OR Jobe_Name=N'" + textBox1.Text.Trim () + "' OR Salary=N'" + textBox1.Text + "'";

mohammad.ardeshiri
پنج شنبه 19 مرداد 1391, 02:45 صبح
کلش خیلی زیاده وسر در نمیارین چون روابط فرما رو انجام ندادم ولی اگه کلاس و فرم مورد جواب میده رو میخواین up کنم؟

mousa1992
پنج شنبه 19 مرداد 1391, 02:52 صبح
میخواستم پروژه ی خودتون رو چک کنم


ولی اگه کلاس و فرم مورد جواب میده رو میخواین up کنم

اینجوری مجبورم دیتابیسو بسازم و چک کنم و شاید مشکلی رو حل نکنه
دوستان با تجربه فردا مشکلتونو حل میکنن
ببخشید

mohammad.ardeshiri
پنج شنبه 19 مرداد 1391, 02:55 صبح
ممنون از کمکتون

mohammad.ardeshiri
پنج شنبه 19 مرداد 1391, 16:10 عصر
کسی نمیتونه کمکم کنه؟

veniz2008
پنج شنبه 19 مرداد 1391, 16:59 عصر
سلام، مشکل اینجاست که شما با یک textbox میخوای همزمان هم فیلد از نوع int و هم فیلدهای از نوع رشته رو فیلتر کنی. معمولا این کاری که شما انجام دادی رو کسی انجام نمیده ( یعنی استاندارد نیست). حداقل یه چک باکسی بذار که مثلا متغیر عددی رو از متغیر رشته ای تفکیک کنه و بعد با توجه به اون چک باکس بیا یک کوئری واسه نوع عددی و یک کوئری واسه نوع رشته ای بنویس.

mohammad.ardeshiri
پنج شنبه 19 مرداد 1391, 17:23 عصر
ممنون درسته مشکلم حل شد وقتی جدا کردم
ولی من میخوام یه textbox باشه و به کاربر اجازه بدم با هر فیلدی که یادشه جستجو کنه

veniz2008
پنج شنبه 19 مرداد 1391, 17:27 عصر
اینی که شما میخوای رو من نمیدونم ولی اصولیش همونی بود که خدمتتون گفتم.(کاربر که میدونه میخواد id وارد کنه یا فامیلی یا هر چیز دیگه ای. به نظر من اگر میخوای از یک تکست باکس همزمان استفاده کنی یا چک باکس استفاده کن یا یک کمبوباکس بذار و از کمبو انتخاب کنه.)
موفق باشی دوست من.

sabzehbzsa
سه شنبه 14 شهریور 1391, 14:17 عصر
سلام من هم از این کد برای جستجو استفاده کردم
ولی موقع نمایش نتیجه جستجو بجای فیلد Ex_Roll علامت سوال نمایش میده

ALTERprocedure [dbo].[pcExSearchnoDate]
@Ex_Name nvarchar(50)=null,
@Ex_Reason nvarchar(50)=null,
@Knd_ID nvarchar(50)=null,
@Ex_Executer nvarchar(50)=null
as
begin
Declare @where nvarchar(max)=''
Declare @select nvarchar(max)=''
declare @true nvarchar
set @select='select Ex_ID,Ex_Name,Ex_Reason,dbo.PersianDate( Ex_StartDate) as Ex_StartDate,dbo.PersianDate( Ex_EndDate) as Ex_EndDate
,dbo.PersianDate( Ex_RecordDate) as Ex_RecordDate,Knd_ID,Knd_Title,Ex_Executer,
Ex_Rol=case Ex_Rol
when(''1'')then N''فعال''
when(''0'')then N''غیرفعال ''
end
,Ex_Number,IsActive
from dbo.view_Exam'
set @true='1'
set @where='IsActive='+@true+' And'
ifnot @Ex_Name isnull
set @where+=' Ex_Name like N''%'+@Ex_Name+'%'' And'
ifnot @Ex_Reason isnull
set @where+=' Ex_Reason like N''%'+@Ex_Reason+'%'' And'
ifnot @Knd_ID isnull
set @where+=' Knd_ID like N''%'+@Knd_ID+'%'' And'
ifnot @Ex_Executer isnull
set @where+=' Ex_Executer like N''%'+@Ex_Executer+'%'' And'
if @where <>''
begin
SET @where=SUBSTRING(@where,0,LEN(@where)- 3)
set @select+=' where '+@where
execsp_executesql@select
end
else
execsp_executesql@select
end