PDA

View Full Version : مشکل در ذخیره عبارات فارسی



Bahar_HS
یک شنبه 28 مهر 1387, 22:09 عصر
با سلام
در فرمم سه تا کمبوباکس دارم:روز ،ماه وسال،

در متد زیر برای ذخیره ی تاریخ این دستور رو نوشتم ولی باز هم "ماه"به صورت؟؟؟؟ذخیره میشه ،چکار باید بکنم؟؟ :متفکر:
(بخشی از دستور)



N'" + comboBox1.Text + "',N'" + comboBox2.Text + "',N'" + comboBox3.Text + "'

parsamiga
یک شنبه 28 مهر 1387, 23:14 عصر
منظورتون را دقیق نفهمیدم ولی بهتره از comboBox1.SelectedItem استفاده کنی نه از
comboBox1.Text
....مشکلت حل نشد توضیح بده :چشمک:

reza6384
دوشنبه 29 مهر 1387, 01:04 صبح
دوست عزیز.
به جای ذخیره تاریخ به صورت فارسی تبدیل شده اون رو به میلادی در دیتابیس ذخیره کنید تا بتونید موقع Query گرفتن از Between برای تاریخ استفاده کنید.
و اما ، برای ذخیره اعداد که N نمی خواد. عجیبه. اگر متن فارسی رو بخواهید در فیلدی ذخیره کنید نوع اون فیلد باید NvarChar یا nText باشه.

Bahar_HS
دوشنبه 29 مهر 1387, 05:31 صبح
با سلام
کمبوباکس ها رو این طوری تعریف کردم:
برای ماه:


comboBoxMounth.Items.Clear();
comboBoxMounth.Items.Add("فروردین/1");
comboBoxMounth.Items.Add("اردیبهشت/2");
comboBoxMounth.Items.Add("خرداد/3");
.
.
.
.


وبرای سال:


comboBoxYear.Items.Clear();
comboBoxYear.Items.Add("1370");
comboBoxYear.Items.Add("1371");
comboBoxYear.Items.Add("1372");
comboBoxYear.Items.Add("1373")
.
.
.
.


در جدول هم نوع همه ی فیلدها رو nvarcahr تعریف کردم،

مساله اینجاست که همه ی این کارها رو در برنامه ی دیگری انجام دادم و داده های"ماه"درست ذخیره می شن ،اما نمی دونم چرا اینجا داده ها؟؟؟؟ ذخیره میشه،

این دستوری که برای Insert نوشتم،که در برنامه ی قبلی جواب میده واینجا نه،


String insertstring = "INSERT into Table1(name,family,degree,khedmat,degreerr,khedmat m,finishday,finishmounth,finishyear)VALUES(N'" + textname.Text + "', N'" + textfamily.Text + "', N'" + strdegre + "',N'" + strkhedmatm + "', N'" + textdegree.Text + "', N'" + textkhedmat.Text + "',N'" + comboBoxDay.Text+ "', N'" + comboBoxMounth.Text+ "', N'" + comboBoxYear.Text + "')";
cmd = new SqlCommand(insertstring, con);
cmd.ExecuteNonQuery();

parsamiga
دوشنبه 29 مهر 1387, 07:07 صبح
ماه ها که ثابتند چرا کد نوشتی توی properties ( ComboBox از قبل ماه هارا وارد کن
در ضمن گفتم از به جای ComboBox.Text از comboBox.SelectedItem استفاده کن

Alen
دوشنبه 29 مهر 1387, 11:02 صبح
يه نگاه به sever collation بنداز ببين arabic هستش؟

reza6384
دوشنبه 29 مهر 1387, 12:08 عصر
دوست عزیز.
با اینکه شیوه بسیار بدی رو برای ذخیره تاریخ در دیتابیس انتخاب کردین، بگین که فیلدهای FinishDay و FinishMonth و FinishYear رو از چه نوعی تعریف کردین؟

Bahar_HS
سه شنبه 30 مهر 1387, 08:28 صبح
با سلام
گفتید"روش بسیار بد"،میشه بگید "روش درست وخوبش" چیه؟

afsharm
سه شنبه 30 مهر 1387, 09:25 صبح
۱- حتما مسئله مورد اشاره alen را چک کنید.
۲- ممکنه همه چیز درست ذخیره شده باشه و فقط در نمایش این طور دیده بشه. یک بار از داخل خود SQL Server نگاه کنید ببینید چطور ذخیره می‌شود.
۳- مقدار تولیدی برای insertstring را حین دیباگ چک کنید.
۴- با استفاده از Sql Profiler کوئری فرستاده شده به دیتابیس را چک کنید.
۵- راه درست‌تر اینه که به جای ذخیره یک رشته فارسی و یا حتی انگلیسی برای فیلد ماه صرفا از یک عدد ۱ تا ۱۲ استفاده کنید. و همانطور که parsamiga گفته به جای text از index استفاده کنید چون هم دقیق‌تر و بدون خطاتره و هم از حملات احتمالی sql injection جلوگیری می‌کند.
۶- راه درست‌تر از ۵ اینه که مطابق توصیه reza6384 مقادیر تاریخ را به همان صورت تاریخ میلادی در بانک اطلاعاتی ذخیره کنید. در عوض زحمت کشیده و از توابع تبدیل تاریخ برای ذخیره و نمایش استفاده کنید. برای این کار کتابخانه‌ها و کلاس‌های زیادی وجود دارد حتی می‌توانید از کلاس PersianCalendar در خود دات نت استفاده کنید.
۷- راه خیلی بهتری هم هست به نام استفاده از یک ORM مثل NHibernate

Bahar_HS
چهارشنبه 01 آبان 1387, 06:45 صبح
باسلام
و باسپاس از راهنمایی همه ،
با اینکه می دونستم که نوع فیلدهای جدول باید از نوع nvarchar باشه، ولی اشتباهی روی
charقرار گرفته بود، که دیگه حل شد،

آقای افشار از راهنمایی تون خیلی خیلی ممنون، هم خلاصه بود و هم کامل ،
امیدوارم در پروژه های بعدی بتونم بهتر برنامه بنویسم.



با آرزو ی موفقیت برای حرفه ای ها و حرفه ای شدن برای تازه کارها