نمایش نتایج 1 تا 18 از 18

نام تاپیک: مشکل با فارسی در کوئریهای اس کیو ال سرور (کوئریهای تنظیم شده در زمان اجرا)

  1. #1

    Question مشکل با فارسی در کوئریهای اس کیو ال سرور (کوئریهای تنظیم شده در زمان اجرا)

    سلام.
    من یه جدول در اس کیو ال سرور دارم و یه سری اطلاعات مربوط به تراکنشهای یک سیستم رو ذخیره میکنم و یک فیلد از نوع کاراکتر رو در این جدول در نظر گرفتم که مشخص میکنه که این تراکنش ورودیه، خروجیه، امانیه یا گزینه های دیگه. حالا میخوام در هر حالت مقدار فارسی مناسب رو برگردونم نه خود فیلد رو. با دستور زیر درست جواب میده
    select KID,PName,case when WType='ib' then N'ورودی' else N'خروجی' end from InOutInfo where ID>1

    اما مشکل اینه که من نمیخوام شرط دستورم ثابت باشه. یعنی شرط در هنگام اجرا توسط کاربر مشخص بشه.واسه همین اومدم یک استور پروسیجر گذاشتم و شرط رو به عنوان پارامتر ورودی گرفتم و کوئری رو هم با توجه به این روش توی یک متغیر ریختم تا آخر اجراش کنم.
    declare @q nvarchar(100)
    set @q='select KID,PName,case when WType=''ib'' then N''ورودی'' else N''خروجی'' end from InOutInfo'+@cond
    exec(@q)


    اما موقع اجرا برای من ؟؟؟؟ برمیگردونه در حالیکه من هم نوع متغیر رو یونیکد در نظر گرفتم و هم تو دستور از کاراکتر "ان" استفاده میکنم. جستجو کردم و جیزی نیافتم. کسی با این مشکل برنخورده تا حالا؟


  2. #2
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: مشکل با فارسی در کوئریهای اس کیو ال سرور (کوئریهای تنظیم شده در زمان اجرا)

    راه حلش که خیلی سادست. ولی من واقعا درک نمیکنم نکته نوشتن SP اینجا چیه؟
    اصلا چرا؟

  3. #3

    نقل قول: مشکل با فارسی در کوئریهای اس کیو ال سرور (کوئریهای تنظیم شده در زمان اجرا)

    اصلا بدون sp. فرض کن با یک کوئری معمولی. اما شرطش قراره که از محیط برنامه نویسی با انتخاب کاربر تنظیم بشه

  4. #4
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: مشکل با فارسی در کوئریهای اس کیو ال سرور (کوئریهای تنظیم شده در زمان اجرا)

    نقل قول نوشته شده توسط عالیه.م مشاهده تاپیک
    سلام.
    من یه جدول در اس کیو ال سرور دارم و یه سری اطلاعات مربوط به تراکنشهای یک سیستم رو ذخیره میکنم و یک فیلد از نوع کاراکتر رو در این جدول در نظر گرفتم که مشخص میکنه که این تراکنش ورودیه، خروجیه، امانیه یا گزینه های دیگه. حالا میخوام در هر حالت مقدار فارسی مناسب رو برگردونم نه خود فیلد رو. با دستور زیر درست جواب میده
    select KID,PName,case when WType='ib' then N'ورودی' else N'خروجی' end from InOutInfo where ID>1

    اما مشکل اینه که من نمیخوام شرط دستورم ثابت باشه. یعنی شرط در هنگام اجرا توسط کاربر مشخص بشه.واسه همین اومدم یک استور پروسیجر گذاشتم و شرط رو به عنوان پارامتر ورودی گرفتم و کوئری رو هم با توجه به این روش توی یک متغیر ریختم تا آخر اجراش کنم.
    declare @q nvarchar(100)
    set @q='select KID,PName,case when WType=''ib'' then N''ورودی'' else N''خروجی'' end from InOutInfo'+@cond
    exec(@q)


    اما موقع اجرا برای من ؟؟؟؟ برمیگردونه در حالیکه من هم نوع متغیر رو یونیکد در نظر گرفتم و هم تو دستور از کاراکتر "ان" استفاده میکنم. جستجو کردم و جیزی نیافتم. کسی با این مشکل برنخورده تا حالا؟
    سلام
    بجای exec از EXEC sp_executesql استفاده کن.

    صبا صبوحی

  5. #5
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: مشکل با فارسی در کوئریهای اس کیو ال سرور (کوئریهای تنظیم شده در زمان اجرا)

    هکرهایی که این کد رو میخونن نمیدونن از خوشحالی چطوری احساساتشون رو بیان کنند.
    2EZ #SQLInjection#

  6. #6

    نقل قول: مشکل با فارسی در کوئریهای اس کیو ال سرور (کوئریهای تنظیم شده در زمان اجرا)

    ممنون از پاسخت. اما نتیجه ای نگرفتم دوست عزیز :(

  7. #7

    نقل قول: مشکل با فارسی در کوئریهای اس کیو ال سرور (کوئریهای تنظیم شده در زمان اجرا)

    نقل قول نوشته شده توسط FastCode مشاهده تاپیک
    هکرهایی که این کد رو میخونن نمیدونن از خوشحالی چطوری احساساتشون رو بیان کنند.
    2EZ #SQLInjection#
    دوست من. اینجا جاییه برای کمک به هم و نه تحقیر هم. اگر پاسخ من رو میتونی بدی ممنون میشم و اگر هم کد امنیتش پایینه باز هم ممنون میشم دلیلشو بگی تا اشکالم رو رفع کنم. صرف به چالش کشیدن کد بدون گفتن دلیل به من کمکی نمیکنی

  8. #8
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: مشکل با فارسی در کوئریهای اس کیو ال سرور (کوئریهای تنظیم شده در زمان اجرا)


  9. #9

    نقل قول: مشکل با فارسی در کوئریهای اس کیو ال سرور (کوئریهای تنظیم شده در زمان اجرا)

    نقل قول نوشته شده توسط FastCode مشاهده تاپیک
    ممنون. اما من دارم یک اپلیکیشن ویندوز مینویسم و کاری با وب ندارم. بنابراین از این بابت خیالم راحته. حالا شما روشی سراغ ندارید من بتونم به نتیجه ای که میخوام برسم؟

  10. #10
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: مشکل با فارسی در کوئریهای اس کیو ال سرور (کوئریهای تنظیم شده در زمان اجرا)

    نقل قول نوشته شده توسط عالیه.م مشاهده تاپیک
    ممنون. اما من دارم یک اپلیکیشن ویندوز مینویسم و کاری با وب ندارم. بنابراین از این بابت خیالم راحته. حالا شما روشی سراغ ندارید من بتونم به نتیجه ای که میخوام برسم؟
    سلام
    من جواب رو به شما گفتم، نمی‌دونم اون رو امتحان کردی یا نه.
    در ضمن گفته‌های دوستمون fastCode راجع به Sql Injection کاملاً درسته و ربطی به وب و ویندوز نداره، همه جا امکان‌پذیر هست.
    شما می‌تونی تو خیلی از نرم‌افزارها که این مسائل رو رعایت نکردن بجای شناسه‌ی کاربر بنویسی --'Admin و بجای رمز هم بنویسی Saba.Sabouhi و بعد
    با کمال تعجب خواهی دید که چقدر راحت می‌شه وارد نرم‌افزار شد، اون هم با اکانت Admin
    تازه این ساده‌ترین کار هست، خیلی کارهای بد! می‌شه با این روش انجام داد. مثل حذف یا اضافه کردن رکورد به جدول‌های دیتابیس یا . . .
    روش‌های استاندارد برای تفریح به وجود نیامدن. سعی کنیم چرخ رو دوباره اختراع نکنیم و از تجربه‌ی دیگران استفاده کنیم

    صبا صبوحی

  11. #11

    نقل قول: مشکل با فارسی در کوئریهای اس کیو ال سرور (کوئریهای تنظیم شده در زمان اجرا)

    نقل قول نوشته شده توسط SabaSabouhi مشاهده تاپیک
    سلام
    من جواب رو به شما گفتم، نمی‌دونم اون رو امتحان کردی یا نه.
    در ضمن گفته‌های دوستمون fastCode راجع به Sql Injection کاملاً درسته و ربطی به وب و ویندوز نداره، همه جا امکان‌پذیر هست.
    شما می‌تونی تو خیلی از نرم‌افزارها که این مسائل رو رعایت نکردن بجای شناسه‌ی کاربر بنویسی --'Admin و بجای رمز هم بنویسی Saba.Sabouhi و بعد
    با کمال تعجب خواهی دید که چقدر راحت می‌شه وارد نرم‌افزار شد، اون هم با اکانت Admin
    تازه این ساده‌ترین کار هست، خیلی کارهای بد! می‌شه با این روش انجام داد. مثل حذف یا اضافه کردن رکورد به جدول‌های دیتابیس یا . . .
    روش‌های استاندارد برای تفریح به وجود نیامدن. سعی کنیم چرخ رو دوباره اختراع نکنیم و از تجربه‌ی دیگران استفاده کنیم

    صبا صبوحی
    بله امتحان کردم و جواب نگرفتم.

  12. #12
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: مشکل با فارسی در کوئریهای اس کیو ال سرور (کوئریهای تنظیم شده در زمان اجرا)

    نقل قول نوشته شده توسط عالیه.م مشاهده تاپیک
    بله امتحان کردم و جواب نگرفتم.
    سلام
    حتماً درست استفاده نکردی، چون من بارها از این system procedure استفاده کردم و بسیار عالی کار می‌کنه.
    این رو امتحان کن.

    exec sp_sqlexec N'SELECT * FROM sys.tables'
    یا

    DECLARE @script AS NVARCHAR( 4000 ) = N'SELECT * FROM sys.tables'
    exec sp_sqlexec @script


    صبا صبوحی

  13. #13

    نقل قول: مشکل با فارسی در کوئریهای اس کیو ال سرور (کوئریهای تنظیم شده در زمان اجرا)

    نقل قول نوشته شده توسط SabaSabouhi مشاهده تاپیک
    سلام
    حتماً درست استفاده نکردی، چون من بارها از این system procedure استفاده کردم و بسیار عالی کار می‌کنه.
    این رو امتحان کن.

    exec sp_sqlexec N'SELECT * FROM sys.tables'
    یا

    DECLARE @script AS NVARCHAR( 4000 ) = N'SELECT * FROM sys.tables'
    exec sp_sqlexec @script


    صبا صبوحی
    مطابق کاری که شما گفتید تست کردم. باز هم ؟؟؟ برگردوند :(
    declare @q as nvarchar(100)=N'select KID,PName,case when WType=''ib'' then N''ورودی'' else N''خروجی'' end from InOutInfo'
    exec sp_sqlexec @q

  14. #14
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: مشکل با فارسی در کوئریهای اس کیو ال سرور (کوئریهای تنظیم شده در زمان اجرا)

    نقل قول نوشته شده توسط عالیه.م مشاهده تاپیک
    مطابق کاری که شما گفتید تست کردم. باز هم ؟؟؟ برگردوند :(
    declare @q as nvarchar(100)=N'select KID,PName,case when WType=''ib'' then N''ورودی'' else N''خروجی'' end from InOutInfo'
    exec sp_sqlexec @q
    سلام
    عجیبه، چون وقتی ؟؟؟ بر می‌گردونه معنیش اینه که unicode نیست و nonunicode-language هم روی persian تنظیم نشده ( تو Control Panel~Regional Settings ) اما
    اینجا رشته‌ها Unicode هستن. من متن شما رو یه کم ساده کردم، ( چون جدول شما رو نداشتم ) و درست جواب داد.

    declare @q as nvarchar(60)=N'select case when 1=1 then N''ورودی'' else N''خروجی'' end '
    exec sp_sqlexec @q

    اگه این نتونست کمکی کنه، دیگه شرمنده‌ام. چیز دیگه‌ای به فکرم نمی‌رسه. این script شما نباید ؟؟؟ برگردونه.

    صبا صبوحی

  15. #15
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: مشکل با فارسی در کوئریهای اس کیو ال سرور (کوئریهای تنظیم شده در زمان اجرا)

    راه حلش اینه که یک متغیر بیرون دستور تعریف کنید و در select بهش مقدار بدید.
    واقعا من فکر کردم یه راه جدید هست که من خبر ندارم.

    ولی در کلا روشتون غلطه.
    قبل از ۱۰ ثانیه من کل دیتابیس رو میارم جلو چشمتون.

  16. #16

    نقل قول: مشکل با فارسی در کوئریهای اس کیو ال سرور (کوئریهای تنظیم شده در زمان اجرا)

    نقل قول نوشته شده توسط SabaSabouhi مشاهده تاپیک
    سلام
    عجیبه، چون وقتی ؟؟؟ بر می‌گردونه معنیش اینه که unicode نیست و nonunicode-language هم روی persian تنظیم نشده ( تو Control Panel~Regional Settings ) اما
    اینجا رشته‌ها Unicode هستن. من متن شما رو یه کم ساده کردم، ( چون جدول شما رو نداشتم ) و درست جواب داد.

    declare @q as nvarchar(60)=N'select case when 1=1 then N''ورودی'' else N''خروجی'' end '
    exec sp_sqlexec @q

    اگه این نتونست کمکی کنه، دیگه شرمنده‌ام. چیز دیگه‌ای به فکرم نمی‌رسه. این script شما نباید ؟؟؟ برگردونه.

    صبا صبوحی
    مرسی. یه چیزی فهمیدم. من یا اس کیو ال سرور اکسپرس کار میکنم و این کوئری اونجا ؟؟ برمیگردونه. اما تو نسخه غیر اکسپرس جواب درست میده. به نظر شما راهی هست که تو اکسپرس هم درست جواب بده؟

  17. #17

    نقل قول: مشکل با فارسی در کوئریهای اس کیو ال سرور (کوئریهای تنظیم شده در زمان اجرا)

    نقل قول نوشته شده توسط FastCode مشاهده تاپیک
    راه حلش اینه که یک متغیر بیرون دستور تعریف کنید و در select بهش مقدار بدید.
    واقعا من فکر کردم یه راه جدید هست که من خبر ندارم.

    ولی در کلا روشتون غلطه.
    قبل از ۱۰ ثانیه من کل دیتابیس رو میارم جلو چشمتون.
    از شما هم ممنون گرامی. الان متوجه شدم اشکال من در اس کیو ال اکسپرس وجود داره. خیلی علاقمندم که بدونم چطور این کار رو میکنید.

  18. #18
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: مشکل با فارسی در کوئریهای اس کیو ال سرور (کوئریهای تنظیم شده در زمان اجرا)

    اگر فقط با یک engine ایم اتفاق میافته به جز راهی که گفتم میتونید برید codepage ه global ه SQL رو بکنید مثلا persian_ci_as
    خیلی خیلی سادش میشه این:
    خروجی رو بدید:
    ' from InOutInfo;delete from InOutInfo --

    اینطوری حتی کسی متوجه نمیشه چه خبره.

تاپیک های مشابه

  1. مشکل با ایجاد rules در اس کیو ال سرور
    نوشته شده توسط oliya24 در بخش T-SQL
    پاسخ: 1
    آخرین پست: چهارشنبه 29 شهریور 1391, 07:41 صبح
  2. مشکل خارج نشدن Frame از حافظه پس از ایجاد استفاده از آن در زمان اجرا
    نوشته شده توسط shedayat در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 26
    آخرین پست: جمعه 16 تیر 1391, 12:31 عصر
  3. مشکل جست جو نام در اس کیو ال سرور با زبان برنامه نویسی ویبی دات نت
    نوشته شده توسط sempay_ninjutsu در بخش دسترسی به داده ها (ADO.Net و LINQ و ...)
    پاسخ: 4
    آخرین پست: چهارشنبه 16 اردیبهشت 1388, 09:08 صبح
  4. سوال: مشکل در استفاده از مقدار يک شئ مقدار دهي شده در زمان اجرا
    نوشته شده توسط mehrpars در بخش C#‎‎
    پاسخ: 5
    آخرین پست: چهارشنبه 30 مرداد 1387, 01:50 صبح
  5. مشکل در فارسی بودن لبیل ها بر روی سرور
    نوشته شده توسط tc1000 در بخش ASP.NET Web Forms
    پاسخ: 17
    آخرین پست: چهارشنبه 05 تیر 1387, 09:34 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •