PDA

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



rezatati
پنج شنبه 01 بهمن 1388, 15:18 عصر
با سلام خدمت اساتید و دوستان
من یک برنامه با سی شارپ نوشتم که به یک مشکل عجیب بر خوردم
و مشکلم اینه که وقتی که یک کاربر رو ایجاد می کنم و نام کاربری رو فارسی وارد می کنم بعد از ثبت نام وقتی که کاربر برنامه رو اجرا می کنه برنامه لیست کلیه نام کاربری ها رو از پایگاه داده با دستورات زیر لود میکنه و در یک کمبو باکس به کاربر نمایش میده تا کاربر نام کاربری رو انتخاب کنه و با وارد نمودن پسوردش بره تو برنامه تا اینجای کار همه چی درسته هم عملیات ثب نام و هم لود تمام نام کاربری ها از پایگاه داده SQL2005 دستورات برای لود نام کاربری به صورت زیر هستش : و در ضمن نام کاربری کلید اصلی در جدول می باشد و در ضمن در SQL تنظیم Arabic_CI_AI رو انجام دادم و برنامه کاملا با فارسی سازگار هستش :


ArrayList UserList = new ArrayList();
pTable = new DataTable();
conn = new SqlConnection(MainForm.conString);
conn.Open();
pcDataAdapter = new SqlDataAdapter("select usname from TbUser", conn);
pcDataAdapter.Fill(pTable);
for (int i = 0; i < pTable.Rows.Count; i++)
{
UserList.Add(pTable.Rows[i]["usname"].ToString());
}
if(conn!=null)
conn.Close();
return UserList;
ولی وقتی مخوام مثلا اطلاعات یک کاربری با نام کاربری "مدیر" که قبلا ثبت نام کرده رو با تابع زیر تو کلاسم لود کنم هیچ از پایگاه داده برنمی گردونه من فکر می کنم کدینگ متغیر UsernamE با کدینگ نام کاربری که در پایگاه داده ذخیره شده فرق می کنه اگه اینطوری هستش من چیکار کنم واگه نیست مشکل از چیه این هم کد تابعی که نام کاربری رو میگره و اطلاعات اونو برای چک کردن رمز عبور برمی گردونه و جالب اینجاست که قبلا فقط واسه جدول کاربر این اتفاق افتاده بود ولی الان یک جدول دیگه هم دارم که اون هم اینطوری شده یعنی نمیشه اطلاعات رو برحسب یک فیلدی که فارسی توش ذخیره شده بازیابی کرد. این هم کدی که مشکل داره



public void GetUserInfo(string UsernamE)
{
try
{
pTable = new DataTable();
conn = new SqlConnection(MainForm.conString);
conn.Open();
pcDataAdapter = new SqlDataAdapter("select * from TbUser WHERE usname='" + UsernamE + "'", conn);
pcDataAdapter.Fill(pTable);
if (pTable.Rows.Count > 0)
که وقتی که در جلوی دستور IF تعداد سطرها رو چک می کنم می بینم که صفر هستش در حالیکه کاربری با نام "مدیر" در پایگاه داده هستش
با تشکر از دوستان و استادید

rezatati
پنج شنبه 01 بهمن 1388, 23:39 عصر
با تشکر از دوستان و اساتید که این تاپیک رو نگاه کردن هر چند جوابی دریافت نکردیم ولی من تونستم که حلش کنم و جوابش رو هم میزارم تا کسی اگه به چنین مشکلی برخورد بتونه راحت حلش کنه


public void GetUserInfo(string UsernamE)
{
try
{
pTable = new DataTable();
conn = new SqlConnection(MainForm.conString);
conn.Open();
pcDataAdapter = new SqlDataAdapter("select * from [TbUser] where usname=@username", conn);
pcDataAdapter.SelectCommand.Parameters.Add("@username", SqlDbType.NVarChar);
pcDataAdapter.SelectCommand.Parameters["@username"].Value = UsernamE;
pcDataAdapter.Fill(pTable);
if (pTable.Rows.Count > 0)

rezatati
پنج شنبه 01 بهمن 1388, 23:40 عصر
و اگه از دوستان و اساتید کسی میدونه دلیل این اتفاق رو به صورت تخصصی به من و سایرین اینجا توضیح بده
با تشکر