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

نام تاپیک: مشکل با فیلد فارسی در پایگاه داده

  1. #1
    کاربر دائمی آواتار amir-yeketaz
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    تهران
    پست
    508

    مشکل با فیلد فارسی در پایگاه داده

    سلام ... من میخوام که یه فیلد که یه نام فارسی می گیره رو به حالت واحد بذارم و اگه کاربر یه نام تکراری انتخاب کرد واسش یه پیغامی ارسال بشه (این دیگه خیلی معروفه قضیش!!)
    حالا من با حروف انگلیسی و اعداد مشکلی ندارم ولی هر موقع میخوام که با حروف فارسی این کارو بکنم نمیدونم چی میشه که تشخیص نمیده !!!!!!! پایگاه دادم که Sql هستش ....
    حالا چیکار کنم که به نام های فارسی تکراری گیر بده ؟!!!!!

    پیشاپیش ممنون

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

    نقل قول: مشکل با فیلد فارسی در پایگاه داده

    یه نمونه کد بزار.
    من میدونم مشکل چیه ولی باید کدتو که توش مقادیر رو تست میکنی بزاری تا بهت بگم چه تغییری میخواد.

  3. #3

    نقل قول: مشکل با فیلد فارسی در پایگاه داده

    خوب شما از کدوم ورژن SQL Server استفاده میکنی ؟ همچین مشکلی هم قبلا برای من پیش اومده بود. من یه دیتابیس تو SQL Server 2000 ساخته بودم که Collation دیتابیس رو Arabic انتخاب کرده بودم. وقتی که کلمه فارسی رو مثل "وقتی" در دیتابیس ذخیره میکردم "ی" رو به صورت عربی یعنی دوتا نقطه به زیر "ي" میچسبوند وبعد ذخیره میکرد. حالا وقتی تو برنامه واسه کلمه "وقتی" جستجو میکردم که آیا "وقتی" تو دیتابیس وجود داره، برنامه "وقتی" رو پیدا نمیکرد چون من کیبورد من فارسی و "وقتی" رو بصورت فارسی تایپ میکردم در حالی که تو دیتابیس "وقتي" بصورت عربی ذخیره شده بود و اون دو نقطه زیر "ي" مشکل ساز میشد. حالا توصیه من اینه که از SQL Server 2008 استفاىه كنيد و Collation دیتابیس رو Persian انتخاب كنيد.

  4. #4
    کاربر دائمی آواتار amir-yeketaz
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    تهران
    پست
    508

    نقل قول: مشکل با فیلد فارسی در پایگاه داده

    من یه تیبل دارم برای ذخیره کالا که اونو میریزم تویه یه دیتاتیبل بعدش از تو دیتاتیبل (dt)چک میکنم که ایا تکراری هست یا نه ؟ اینم تابعی که ازش استفاده میکنم :
            public bool IsNameNon_repetitive(string name)
    {
    string select = string.Format("Name = '{0}'", name);
    DataRow[] temp = dt.Select(select);
    if (temp.Length >= 1)
    {
    return false;
    }
    return true;
    }

    حالا چی ؟
    نسخه ی Sql هم SqlExpress هست ؟ البته چون این پروژه یه پروژه ی خود تعریفی هست این مشکل رو میشه حلش کرد !!! ولی میخوام بدونم که چرا با فارسی اینجوری میشه ؟؟؟

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

    نقل قول: مشکل با فیلد فارسی در پایگاه داده

    نقل قول نوشته شده توسط amir-yeketaz مشاهده تاپیک
    من یه تیبل دارم برای ذخیره کالا که اونو میریزم تویه یه دیتاتیبل بعدش از تو دیتاتیبل (dt)چک میکنم که ایا تکراری هست یا نه ؟ اینم تابعی که ازش استفاده میکنم :
            public bool IsNameNon_repetitive(string name)
    {
    string select = string.Format("Name = '{0}'", name);
    DataRow[] temp = dt.Select(select);
    if (temp.Length >= 1)
    {
    return false;
    }
    return true;
    }

    حالا چی ؟
    نسخه ی Sql هم SqlExpress هست ؟ البته چون این پروژه یه پروژه ی خود تعریفی هست این مشکل رو میشه حلش کرد !!! ولی میخوام بدونم که چرا با فارسی اینجوری میشه ؟؟؟
    پس نتیجه میگیریم هیچ ربطی به collation نداره.
    مشکل کد شما اینه که از N قبل از '' استفاده نکردی و SQL رشته شما رو تبدیل به ANSI/ASCII(من همیشه این دو تا رو قاطی میکنم) میکنه.اگر از پارامتر استفاده کنید مشکل شما اصلاً به وجود نمیاد چون SqlCommand به طور خودکار برای شما N رو در نظر میگیره.

  6. #6
    کاربر دائمی آواتار amir-yeketaz
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    تهران
    پست
    508

    نقل قول: مشکل با فیلد فارسی در پایگاه داده

    مشکل کد شما اینه که از N قبل از '' استفاده نکردی و SQL رشته شما رو تبدیل به ANSI/ASCII(من همیشه این دو تا رو قاطی میکنم) میکنه.
    میشه اینو توضیح بدی ؟؟ این N قضیش چیشه ؟ البته یه جایی اینا رو شنیدم که مربوط به استاندارد کارکتر ها بود فکر کنم!!!!!

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

    نقل قول: مشکل با فیلد فارسی در پایگاه داده

    نقل قول نوشته شده توسط amir-yeketaz مشاهده تاپیک
    میشه اینو توضیح بدی ؟؟ این N قضیش چیشه ؟ البته یه جایی اینا رو شنیدم که مربوط به استاندارد کارکتر ها بود فکر کنم!!!!!
    درسته.
    N یعنی
    Unicode

  8. #8
    کاربر دائمی آواتار amir-yeketaz
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    تهران
    پست
    508

    نقل قول: مشکل با فیلد فارسی در پایگاه داده

    یعنی میگی اونجایی که دارم رکورد به دیتابیس insert میکنم از پارامتر استفاده کنم درست میشه ؟این N رو کجا بذارم؟؟؟؟ میشه اون کد قبل رو که دادم ویرایشش کنی؟

  9. #9
    کاربر دائمی
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    گلستان
    پست
    191

    نقل قول: مشکل با فیلد فارسی در پایگاه داده

    نقل قول نوشته شده توسط amir-yeketaz مشاهده تاپیک
    من یه تیبل دارم برای ذخیره کالا که اونو میریزم تویه یه دیتاتیبل بعدش از تو دیتاتیبل (dt)چک میکنم که ایا تکراری هست یا نه ؟ اینم تابعی که ازش استفاده میکنم :
            public bool IsNameNon_repetitive(string name)
    {
    string select = string.Format("Name = '{0}'", name);
    DataRow[] temp = dt.Select(select);
    if (temp.Length >= 1)
    {
    return false;
    }
    return true;
    }

    حالا چی ؟
    نسخه ی Sql هم SqlExpress هست ؟ البته چون این پروژه یه پروژه ی خود تعریفی هست این مشکل رو میشه حلش کرد !!! ولی میخوام بدونم که چرا با فارسی اینجوری میشه ؟؟؟
            public bool IsNameNon_repetitive(string name)
    {
    string select = string.Format("Name = N'{0}'", name);
    DataRow[] temp = dt.Select(select);
    if (temp.Length >= 1)
    {
    return false;
    }
    return true;
    }

    با سلام

    در تکمیل فرمایش دوستان ، N رو قبل از تک کوتیشن اول میذاریم .هرعملی خواستی انجام بدی باید N رو بذاری

  10. #10
    کاربر دائمی آواتار amir-yeketaz
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    تهران
    پست
    508

    نقل قول: مشکل با فیلد فارسی در پایگاه داده

    ممنون ولی این کار exception پرتاب میکنه ؟؟!!!!!!!!
    این:
    Syntax Missing operand after"" ...
    --------------------
    من از این کدی که FastCode گفته بود به این روش انجام بده استفاده کردم ولی بازم تشخیص نمیده !!!!!


    SqlCommand cmd = new SqlCommand("Select *From Good Where Name = @Name", conn);
    cmd.Parameters.AddWithValue("@Name", name);
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataTable dtRowExist = new DataTable();
    da.Fill(dtRowExist);
    if (dtRowExist.Rows.Count >= 1)
    {
    return false;
    }
    return true;
    آخرین ویرایش به وسیله amir-yeketaz : سه شنبه 02 شهریور 1389 در 00:19 صبح دلیل: این پست به دلیل تکراری بودن به طور خودکار ادغام شده است.

  11. #11

    نقل قول: مشکل با فیلد فارسی در پایگاه داده

    نقل قول نوشته شده توسط FastCode مشاهده تاپیک
    پس نتیجه میگیریم هیچ ربطی به collation نداره.
    برای مثال اسمی رو که داری جستجو میکنی از دیتابیست بگیر و در یک متغییر ذخیره کن. حالا این اسم رو که خودت تایپ میکنی با اسمی که از دیتابیس گرفتی کاراکتر به کراکتر مقایسه کن مبینی که در کجا تفاوت وجود داره.

  12. #12
    کاربر دائمی آواتار amir-yeketaz
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    تهران
    پست
    508

    نقل قول: مشکل با فیلد فارسی در پایگاه داده

    خیلی خیلی برام جالب شده ....
    نام "سیب" رو دیباگ کردم آخرش space انداخته بود بعد trim کردم درست شد همون "سیب" اون زیره که مقدار متغیرها رو تو vs نشون میده عین هم بود ولی خیلی عادی == رو رد کرد
    بعد اومدم یه نام دیگه زدم به نام "پفک"(البته دو بار برای تست پیغام!) ولی این دیگه رد نکرد !!!!!!!!
    این دیگه واقعا برام عجیب بود
    پس نتیجه میگیریم هیچ ربطی به collation نداره.
    فکر کنم داره ! حالا این collation چی هست؟؟؟ میشه توضیح بدین ؟

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

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