PDA

View Full Version : سوال : فارسی نویسی در sql



abnoos
جمعه 06 شهریور 1383, 12:49 عصر
من با فارسی نویسی در sqlمشکل دارم ، نوع داده ای را nachar, nvarchar تعریف کردم ،اما هنوز در query analyzer نمی توانم فارسی insert، update کنم , همه داده ها به ؟؟ تبدیل می شوند ، البته در محیط enterprise مشکلی ندارم ،
با توجه به همین مشکل با استفاده از class sqlcommand در سی شارپ نمی توانم عملیات insert , update,.. انجام بدهم .
در ویندوز چه تنظیماتی باید انجام داد؟، من حتی در قسمت advance فارسی را set کردم .
برای حل این مشکل چه کار باید کنم ؟

AminSobati
جمعه 06 شهریور 1383, 13:33 عصر
دوست عزیزم،
اگر از طریق QA قصد دارید اطلاعات فارسی(یونیکد) به جدول وارد کنید، از حرف N قبل از عبارات یونیکد استفاده کنین تا اون عبارت رو به SQL Server به عنوان یونیکد معرفی کنین. مثلا با فرض به اینکه MyTable دارای یک فیلد از جنس nVarChar باشه:


INSERT MyTable Values(N'عبارت تستی')

حالا چه در QA و چه در EM شما اون رکورد رو فارسی میبینید.
ولی یک نکته مهم:
به طور کلی مشاهده اطلاعات به طور فارسی در QA یا EM ملاک برای فارسی بودن اطلاعات نیست. چرا که کاربر برنامه شما نه در QA عمل Data Entry انجام میده نه در EM، بلکه از طریق نرم افزار Client که شما نوشتید! بنابراین اطلاعات باید در فرم برنامه فارسی وارد بشن و مجددا در فرم برنامه، فارسی رویت بشن.
برای اینکه از طریق برنامه اطلاعات به طور صحیح(فارسی) وارد Database بشن، حتی المقدور از Stored Procedure استفاده کنین و پارامترها رو از جنس صحیح انتخاب کنید.
موفق باشید،
امین ثباتی MCSD

sh
جمعه 06 شهریور 1383, 15:22 عصر
حتی المقدور از Stored Procedure استفاده کنین و پارامترها رو از جنس صحیح انتخاب کنید.

اگر ممکنه یکم بیشتر توضیح بدین

AminSobati
جمعه 06 شهریور 1383, 15:45 عصر
به عنوان مثال از یک Stored Procedure اگر استفاده کنیم برای عمل Insert:


CREATE PROC MyInsert
@Param1 nVarChar(50) AS
INSERT MyTable VALUES (@Param1)
GO

الان با داشتن این Stored Procedure میتونیم از داخل برنامه توسط ADO اون رو Call کنیم. البته توسط Recordset هم امکان وارد کردن رکوردها بصورت یونیکد هستش ولی همیشه استفاده از دستورات T-SQL از نظر Performance برتری داره.

abnoos
شنبه 07 شهریور 1383, 12:34 عصر
خیلی خیلی ممنون از جوابتون ، مشکلم حل شد .

AminSobati
شنبه 07 شهریور 1383, 13:46 عصر
:)

havig
پنج شنبه 12 شهریور 1383, 02:43 صبح
سلام
ببخشید مشکل ما در رابطه با حروف فارسی حل شد ولی با اعداد فارسی نه لطفا کمکم کنید
ممنون

AminSobati
پنج شنبه 12 شهریور 1383, 10:45 صبح
فارسی کردن اعداد از طریق Regional Settings در Control Panel انجام میشه که البته کل ویندوز رو تحت تاثیر قرار میده. ولی اگر فقط در متن مورد نظر قرار باشه این کار رو انجام بدین فکر میکنم متنی که یوزر وارد میکنه رو باید داخلش اعداد رو Convert کنین به کد معادلش در سیستم یونیکد تا فارسی بشه و این متن دستکاری شده رو در DB ذخیره کنین.

ali_bagheri34
پنج شنبه 26 شهریور 1383, 11:26 صبح
OK :lol:

mhaeri
سه شنبه 07 مهر 1383, 13:24 عصر
سلام
بابت تمام زحماتتون ممنون
من میخوام بدونم چرا وقتی به طور مستقیم در Query Analayzer داده وارد می کنیم:

insert into Table1
(name)
values
(N'گ')

و نوع فیلد هم nchar هست برای مثال و Collation هم Latin_General_CI_AS و یا Arabic_CI_AS
حالا وقتی تو query Analayzer وقتی select ساده می زنیم :Select * from Table1 Order by name ASC
حروف رو مرتب نشون میده الا کلمات (ی - و - ک- چ--گ-و)
میدونم که مشکل از ویندوز هست و کد پیج و یا ممکنه فونت باشه...
ولی آیا راهی جهت رفع این مشکل هست؟
اگر امکان داره راهنمایی بفرمایید
ممنون :flower:

AminSobati
سه شنبه 07 مهر 1383, 14:27 عصر
دوست عزیزم،
رفع این مشکل ظاهرا با نرم افزارهای جانبی میسره. در بازار Packageهایی وجود داره، مثلا یکیش به نام فردوسی (اگر اشتباه نکنم).
احتمال این وجود داره که در نسخه بعدی SQL Server مایکروسافت به این نکات توجه بیشتری کرده باشه. همونطور که مثلا در NET Frame Work 2 تاریخ شمسی پشتیبانی میشه...