با سلام خدمت دوستان.
ما برای فرم اولیه برناممون نام کاربری رو admin تعیین کردیم و موقع ورود هم برنامه چک میکنه نام کاربری و رمز عبور رو. ولی مشکل اینجاست که اگه من ADMIN هم بزنم وارد برنامه میشه.همچنین اگه بعد admin دکمه space روهم بزنم بازم تشخیص نمیده و وارد برنامه میشه.خب این دو اتفاق اصلا خوب نیست.باید حتما admin با حروف کوچک باشه. من بخوام شرط بذارم که space نزنه، شاید یک کاربر تعریف کنه که بین اسم و فامیلش فاصله باشه، اونوقت به مشکل میخوره برنامه.
باید چیکار کنم؟
چگونه نام کاربری را چک می کنید لطفا کدهاتون رو قرار بدید ؟
کد دکمه ورود این هست:
if (comboBox1.Text == "مدیر") { string user = txtuser.Text; string pass = txtpass.Text; context=new DataenterDataContext(); var q = context.tblsabtkarbars.Where(c => c.status == true && c.username == user && c.password == pass); if (q.Count() != 0) { //بیرون کشیدن نام و نام خانوادگی از فیلد جدول و ریختن در یک لیبل var b = from j in context.tblsabtkarbars where j.username == txtuser.Text select j; string vb = ""; foreach (tblsabtkarbar f in b) vb = f.fullname.ToString(); //فرستادن مقادیر مورد نظر از صفحه لاگین به صفحه اصلی var g = new home(); g.lbfullname = vb; g.lblusername = txtuser.Text; g.Show(); this.Hide(); // //ذخیره اطلاعات کاربر هنگام ورود به برنامه context = new DataenterDataContext(); tblloandleuser insert = new tblloandleuser(); insert.username = txtuser.Text; // var ha = from j in context.tblsabtkarbars where j.username == txtuser.Text select j; string v = ""; foreach (tblsabtkarbar f in ha) v = f.idu.ToString(); string a = v; insert.idu = Convert.ToInt32(a); //بیرون کشیدن نام و نام خانوادگی از فیلد جدول و ریختن در یک لیبل string va = ""; foreach (tblsabtkarbar f in ha) va = f.fullname.ToString(); // insert.fullname = va; } else { MessageBox.Show("نام کاربری یا کلمه عبور یا چکس باکس انتخاب شده اشتباه است"); }
اینم تصویر صفحه login:
ابتدا مقدار را Trim کنید تا فاصله ها حذف بشه و سپس ToLower کنید تا حروف کوچیک بشه و بعد استفاده کنید
EF بر روی حروف کوچک و بزرگ هنگام اجرای کوئری حساس نیست.
برای حل این مشکل باید خودمان کوئری sql را بنویسیم و از COLLATE SQL_Latin1_General_CP1_CS_AS استفاده کنیم:
var query = "SELECT * FROM dbo.tblsabtkarbars where [username] = @username COLLATE SQL_Latin1_General_CP1_CS_AS and [password] = @pass"; var userNameParameter = new SqlParameter("username",txtuser.Text); var passWordParameter = new SqlParameter("pass",txtpass.Text); var q = context.Database.SqlQuery<tblsabtkarbars>(query, userNameParameter, passWordParameter);
نمونه :
برای Space هم دو طرف عبارت که می توانید از Trim() استفاده کنید مثلا اینجوری:
txtUsername.Text.Trim()
اما برای اینکه الزاما بزرگ و کوچک بودن حروف را نادیده بگیرد معمولا عرف بر این است که شما نام کاربری وارده را با نام کاربری ذخیره شده در دیتابیس با حروف همسان چک کنی به این صورت که:
txtUsername.Text.Trim().ToLower()== username.ToLower()
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)