PDA

View Full Version : سوال: مشکل جستجو در دیتابیس توسط وی بی دات نت



seyed ehsan
جمعه 12 شهریور 1389, 01:49 صبح
دوستان عزیز سلام . نماز و روزه ها قبول .

داشتم روی کد های بانک اطلاعاتی تمرین می کردم که به مشکل بر خوردم . یه بانک اطلاعاتی دارم که با اکسس نوشته شده است و در یکی از tabel های آن نام کاربری و پسورد نگه داری میشود .

فرمی را در وی بی دات نت ساخته ام که 2 تکس باکس برای وارد کردن نام کاربری و پسورد دارد . همه چیز خوب کار میکند به شرطی که کاربر در تکس باکس نام کاربری فقط عدد وارد کند ! یعنی در زمان وارد کردن حروف دچار خطا میشود که تصویر آن را برای شما قرار داده ام . میشود من را راهنمایی کنید ؟ مشکل از کجاست ؟

کد های استفاده شده :

Private Sub btnLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLogin.Click
Dim CoN As OleDbConnection
Dim CmD As OleDbCommand
Dim DtR As OleDbDataReader
Dim strUserName As Integer
Dim strPassword As String



CoN = New OleDbConnection("Provider=microsoft.jet.OLEDB.4.0;Data Source=d:\Refah.mdb;")
CoN.Open()

CmD = New OleDbCommand("Select * from UserAccount Where ID like " & txtUserName.Text, CoN)
DtR = CmD.ExecuteReader

Do While DtR.Read
strUserName = DtR("ID")
strPassword = DtR("Password")
Loop

If strUserName = txtUserName.Text And strPassword = txtPassword.Text Then
'Login
'Show The MDIRefah
Me.Hide()
MDIRefah.Show()
Else
MsgBox("خطای پسورد")

End If

DtR.Close()
CoN.Close()




End Sub


توضیح اینکه من در قسمت :
Select * from UserAccount Where ID like " & txtUserName.Text

بجای like از حالت های دیگر هم استفاده کردم ولی باز هم برای حروف کار نمی کرد ولی در مورد اعداد درست بود .

Shahram_Shobeiri
جمعه 12 شهریور 1389, 02:24 صبح
این خط رو اصلاح کن


CmD = New OleDbCommand("Select * from UserAccount Where ID = '" & txtUserName.Text & "'", CoN)

Shahram_Shobeiri
جمعه 12 شهریور 1389, 02:30 صبح
در ضمن از روش خوبی استفاده نمی کنی
بهتره یه sp بنویسی که یه username و password بگیره و یه جواب boolean بده. تو سلکت sp هم user و pass رو با and شرط قرار بده

seyed ehsan
جمعه 12 شهریور 1389, 09:19 صبح
در ضمن از روش خوبی استفاده نمی کنی
بهتره یه sp بنویسی که یه username و password بگیره و یه جواب boolean بده. تو سلکت sp هم user و pass رو با and شرط قرار بده ضمن تشکر از راهنمایی شما میشه یه کمی در مورد این روشی که فرمودید توضیح بدید ؟ راستش رو بخواهید من متوجه نشدم.
درضمن من اون خط رو اصلاح کردم ولی باز هم همون خطا رو داد

اینطور که من برداشت کردم :
اگر در بانک اطلاعاتی فیلد username از نوع integer تعریف بشه به این مشکل برخورد میکنم

mahdi1373
جمعه 12 شهریور 1389, 15:39 عصر
شما نباید ستون ID رو مساوی username وارد شده قرار میدادی. چون این ستون به طور پیش فرض از نوع عددی تعریف شده. دوتا ستون توی دیتابیس ات برای username و pssword بساز و کدت رو اینجوری اصلاحش کن. جای username هم نام ستون یوزر توی دیتابیس رو بزار.


CmD = New OleDbCommand("Select * from UserAccount Where username = '" & txtUserName.Text & "'", CoN)در ضمن از روش خوبی هم برای کار استفاده نمی کنی.اینجوری کدت رو تغییر بده:


Private Sub btnLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLogin.Click
Dim cn As OleDbConnection = New OleDbConnection("Provider=microsoft.jet.OLEDB.4.0;Data Source=d:\Refah.mdb;")
cn.Open()
Dim cmd As OleDbCommand = New OleDbCommand("select * from UserAccount where username like '" + txtPassword.Text + "' and password like '" +
txtUserName.Text + "'", cn)
Dim rd As OleDbDataReader = cmd.ExecuteReader
If (rd.Read) Then
'Login
'Show The MDIRefah
Me.Hide()
MDIRefah.Show()
Else
MsgBox("خطای پسورد")
End If
cn.Close()
End Sub

seyed ehsan
شنبه 13 شهریور 1389, 05:10 صبح
دوست عزیز خیلی ممنون . مشکل من حل شد فقط یه سوال برام پیش اومده به این توضیحی که شما دادید اگر بخواهیم نام کار بری رو فقط از نوع عددی داشته باشیم باید چکار کنیم . باید در دیتا بیس اون رو از نوع رشته ای تعریف کنیم ؟ قرار بود در این دیتا بیس من هر کاربر برای نام کار بری یه کد کاربری 4 رقمی داشته باشه که البته غیر تکراری هم هست . به این شرایط تکلیف چیه؟

mahdi1373
شنبه 13 شهریور 1389, 17:05 عصر
پیشنهاد من اینه که در دیتابیس ستونت رو بصورت عددی تعریف کنی و کشابه همین عملیات رو روش انجام بدی. فقط باید موقع تبت نام چند تا شرط بزاری تا فقط اعداد 4 رقمی به عنوان نام کاربری ثبت بشه. برای اینکار هم از توابع IsNumeric و Len و ... باید استفاده کنی.

Shahram_Shobeiri
یک شنبه 14 شهریور 1389, 09:42 صبح
معمولا در مورد کد کاربری اینطور عمل نمی کنند که به کاربر بگن یه عدد برای کد کاربریت وارد کن. روش بهتر اینه که پس از اینکه کاربر رو با نام کاربری و کلمه عبور و سایر مشخصات ثبت نام کردی، یه کد کاربری هم بهش اختصاص بدی. برای تولید این کد هم می تونی از همون ستون کلید اصلی استفاده کنی. فقط توجه داشته باش که is identity اون رو yes و identity seed رو 1000 قرار بدی تا یه عدد چهار رقمی تولید بشه. البته می تونی با الگوریتم خاص خودت هم این عدد رو تولید کنی، فقط باید به یکتا بودن اون توجه داشته باشی!