مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

saeedhomayoni

عضویت از 1396/07/20

کار با داده های فارسی در سی شارپ

  • جمعه 2 آذر 1397
  • 12:32
تشکر میکنم

سلام یه برنامه دارم با C# wpf  و  sql server استفاده میکنم .

مشکل من اینه که همه ی تکست باکس ها داده های فارسی در ذخیره و ویرایش در پایگاه داده درست کار میکنن ولی زمانی که میخوام جست و جو کنم بعضی هاش درست کار میکنه و بعضی هاش نه یعنی وقتی حروف انگلیسی وارد میکنم جست و جو درست کار میکنه ولی حروف فارسی رو نه البته دوباره مشکل اینجاست که بعضی از تکست باکس ها درست کار میده وو تفاوتی بین داده فارسی و انگلیسی نداره تو جست و جو درست کار میکنه

هیچ خطایی نمیده ! فقط وقتی داده فارسی وارد میکنم خالی برمیگردونه

پاسخ های این پرسش

تعداد پاسخ ها : 5 پاسخ
کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • شنبه 3 آذر 1397
  • 08:57

کد مربوط به جستجو را قرار بدید.

کاربر سایت

saeedhomayoni

عضویت از 1396/07/20

  • شنبه 3 آذر 1397
  • 20:22

لایه ی Data Access Layer

   //جست و جو 


        public DataTable Search(string strsearch)
        {
            FacilityEntity FsEntity = new FacilityEntity();
            DataTable dtResult = new DataTable();
            try
            {
                connection.Close();
                command.Connection = connection;
                connection.Open();
                command.CommandText = "SELECT * FROM FacilityListView  WHERE 1=1  " + strsearch; ;
                MessageBox.Show(command.CommandText);
                SqlDataAdapter da = new SqlDataAdapter(command);
                connection.Close();
                da.Fill(dtResult);
            }
            catch { MessageBox.Show("خطا در بازیابی داده ها از پایگاه داده احتمالا ارتباط قطع باشد ."); }
            finally { connection.Close(); }
            return dtResult;
        }

لایه ی Business Layer

  // جست و جو
        public DataTable search(string strsearch)
        {
          return  objcontractordal.Search( strsearch);
        }

لایه ی Logic

  //جست و جو
        private void BtnSearch_Click(object sender, RoutedEventArgs e)
        {
            string strsearch = "";
            if (TxtEquipCode.Text.Count()!=0)
            { strsearch += " AND EquipCode='"+ TxtEquipCode.Text +"'"; }
            if (TxtFacilityName.Text.Count() != 0)
            { strsearch += " AND NameFacility='" + TxtFacilityName.Text + "'"; }
            if (TxtFacilityConsumption.Text.Count() != 0)
            { strsearch += " AND Consumption='" + TxtFacilityConsumption.Text + "'"; }

            dataGrid.ItemsSource= objFacBLL.search(strsearch).DefaultView;
        
        }

روش کار به ان صورت هست که کاربر داده ها را در تکست باکس مینویسه و بعد دکمه را در لایه ی logic میزنه این دکمه چک میکنه کدوم تکست باکس پره و جمله  ی مربوطه رو درست میکنه بعد میفرسته به Business و بعد به Data Access در اونجا جمله کامل شده و عملیات پایگاه داده انجام میشه و همه چیز با داده های انگلیسی خوب کار میکنهو همه تکست باکی ها جواب میده !

اما در داده های فارسی هنگام ذخیره و ویرایش داده ها همه ی تکست باکس ها خوب کار میکنن ولی هنگام جست و جو بعضی از تکست باکس ها با وجود اینکه جمله رو درست به لایه ی آخر میرسونن ولی هیچ نتیجه ای برنمیگرده در صورتی که برخی دیگه با همین روش هم داده های فارسی و هم انگلیسی رو بر میگردونن

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • یکشنبه 4 آذر 1397
  • 11:38

حرف N  را به اول حروف جستحو اضافه کنید به عنوان مثال در کد شما قسمت مربوط به NameFacility:

            strsearch += " AND NameFacility=N'" + TxtFacilityName.Text + "'";

کاربر سایت

saeedhomayoni

عضویت از 1396/07/20

  • یکشنبه 4 آذر 1397
  • 16:14

تشکر

درست شد

ولی میشه دلیلش رو توضیح بدید . ممنون

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • دوشنبه 5 آذر 1397
  • 09:38

شما زمانی که از کلمات فارسی در جداول خود استفاده می کنید و حتی نوع داده جدول خود را از نوع nvarchar تعریف کنید لازمه این است که با استفاده از حرف N بگوید که پارامتر موردنظر را به عنوان  nvarchar در نظر بگیر به جای این که آن را به عنوان varchar استفاده کنی.

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)