PDA

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



samad1987
شنبه 08 تیر 1392, 00:10 صبح
سلام دوستان گرامی
راستش خیلی گشتم بحث مشابه وجود داشت و لی متاسفانه جواب درستی موجود نبود
لطفا کمکم کنید
من میخوام براساس داده ی انتخاب شده ی یک combobox جستجو کنم و داده های نتیجه رو در یه combobox دیگه قرار بدم
موقعی که داده ی سرچ شده انگلیسیه هیچ مشکلی نداره و جواب میده ولی موقعی که داده فارسیه سرچ درست انجام نمیشه و هیچ جوابی برنمیگردونه :



SqlConnection c = new SqlConnection();
c.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + "\\Database1.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
try
{
c.Open();
}
catch
{
MessageBox.Show("the database can't be open...please try again later... ");
}

comboBox3.Enabled = true;

SqlDataAdapter sda = new SqlDataAdapter("select period_number from period WHERE period_name = '"+comboBox2.SelectedValue+"'",c);
DataSet d = new DataSet();

sda.Fill(d, "cert");

int i;
for (i = 0; i < d.Tables["cert"].Rows.Count; i++)
comboBox3.Items.Add(d.Tables["cert"].Rows[i].ItemArray.GetValue(0));
// comboBox3.SelectedIndex = 0;

c.Close();




اسم جدول ، فیلد .. درسته .. نوع داده جدول nvarchar هستش collation فارسیه
جدا کلافه شدم!!
لازم به ذکره که combobox2 هم از همین دیتابیس و توسط ویزارد پر میشه !!

m.webgard
شنبه 08 تیر 1392, 00:29 صبح
سلام دوستان گرامی
راستش خیلی گشتم بحث مشابه وجود داشت و لی متاسفانه جواب درستی موجود نبود
لطفا کمکم کنید
من میخوام براساس داده ی انتخاب شده ی یک combobox جستجو کنم و داده های نتیجه رو در یه combobox دیگه قرار بدم
موقعی که داده ی سرچ شده انگلیسیه هیچ مشکلی نداره و جواب میده ولی موقعی که داده فارسیه سرچ درست انجام نمیشه و هیچ جوابی برنمیگردونه :



SqlConnection c = new SqlConnection();
c.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + "\\Database1.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
try
{
c.Open();
}
catch
{
MessageBox.Show("the database can't be open...please try again later... ");
}

comboBox3.Enabled = true;

SqlDataAdapter sda = new SqlDataAdapter("select period_number from period WHERE period_name = '"+comboBox2.SelectedValue+"'",c);
DataSet d = new DataSet();

sda.Fill(d, "cert");

int i;
for (i = 0; i < d.Tables["cert"].Rows.Count; i++)
comboBox3.Items.Add(d.Tables["cert"].Rows[i].ItemArray.GetValue(0));
// comboBox3.SelectedIndex = 0;

c.Close();




اسم جدول ، فیلد .. درسته .. نوع داده جدول nvarchar هستش collation فارسیه
جدا کلافه شدم!!
لازم به ذکره که combobox2 هم از همین دیتابیس و توسط ویزارد پر میشه !!

سلام
وقتی در sql عبارت فارسی رو مستقیم بکار میبرید (یعنی از پارامترها در sql استفاده نمیکنید ) باید قبل از عبارت فارسی، کاراکتر N قرار بدید. من فکر میکنم مشکل کار از همین مورد باشه. تست کنید. مثلا:
"select period_number from period WHERE period_name = N'"+comboBox2.SelectedValue+"'"
موفق باشید

samad1987
شنبه 08 تیر 1392, 00:33 صبح
اتفاقا همین کار رو هم کردم
زدم
period_name LIKE N
باز همین شد

m.webgard
شنبه 08 تیر 1392, 00:40 صبح
به نظرم یکبار فقط قسمت کوئری رو در sql server اجرا کنید و مقدار فارسی بدید(با N)
ببینید اصلا تو این شرایط جواب میده؟

samad1987
شنبه 08 تیر 1392, 01:57 صبح
باور کنید اینو زدم درست شد!!! احساس میکنم 2-3 تا شاخ تو سرم دارم !!!


SELECT period_number FROM period WHERE(period_name = '" + comboBox2.SelectedValue + "')