PDA

View Full Version : سوال: مقايسه دو عبارت يكي در textbox و ديگريdatabase



rezabnm
پنج شنبه 19 آذر 1388, 23:45 عصر
سلام به مهندسان بازم :لبخند:منم با يه سوال جديد موضوع از اين قرار كه من مي خوام از دوtextbox مقداري كه وارد ميشه خوانده بشه و اگه در ديتابيس وجود داشت به كاربر اجازه ورود داده بشه من روش كارم رو اين توري ترسيم كردم كه از كاربر ميخوام كه در text box ها مقداري رو وارد كنه و سپس اون مقدار هاي وارد شده در داخل دو متغير از جنس stringريخته ميشن و سپس با استفاده از sqldatareader و دستور whileتمام ركورد هاي يه جدول خونده ميشن و با اون متغير اگر برابر بود اجازه ورود داده ميشه وگرنه كه ميگه رمزشما صحيح نبود حالا نكته جالب اينجاست كه من تموم اين كارارو انجام دادم ولي هرچه قدر رمز صحيح رو ميزدم ميديدم كه همش پيغام ميده كه رمز شما صحيح نيست!!!!!:عصبانی++:(جالبه ها منم با اين برنامه نوشتنم)وقتي براي اينكه ببينم از ديتابيس درست خونده ميشه يانه آدرس اونreader.read("username").tostring()
كه به تكس بكس پايني ميدادم ميديدم كه مقدار جلوي چشمم و خونده شده ولي رد ميكنه:متعجب: كوپ كردم :اشتباه:اين ديگه چه جورشه! :متعجب:حالا اگه كسي دليلش رو ميدونه بگه ممنون ميشم.
اينم كدم:

Imports System.Data
Imports System.Data.SqlClient
Public Class Form1
Sub New
Sub reader()
Dim bnn As New objconnction
Dim stri, bb As String
bnn.conn.Open()
If TextBox1.Text.Length <= 0 Then
MsgBox("لطفا نام خود را وارد كنيد", MsgBoxStyle.OkOnly)
Else

bnn.dread = bnn.cmd.ExecuteReader
While bnn.dread.Read()
stri = TextBox1.Text
bb = bnn.dread("username").ToString()
If bb <> stri Then
TextBox2.Text = bb
MsgBox("رمز شما صحيح است", MsgBoxStyle.OkOnly)
Else
TextBox1.Clear()
MsgBox("رمز شما صحيح نيست", MsgBoxStyle.OkOnly)
Exit While
End If
End While
End If
bnn.conn.Close()
End Sub

Public Class objconnction
Private path As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\reza\My Documents\Visual Studio 2005\Projects\test1\test1\infoentekabat.mdf;Integr ated Security=True;User Instance=True"
Public conn As SqlConnection = New SqlConnection(path)
Private str As String = "SELECT * FROM info_user"
Public cmd As SqlCommand = New SqlCommand(str, conn)
Public dread As SqlDataReader
End Class

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
reader()
End Sub

End Class

viper2009
جمعه 20 آذر 1388, 01:50 صبح
آقا دیباگ کن ببین اصلاً اطلاعات لود میشه؟

با این Attach من بعید می دونم

وقتی دیباگ کنی می بینی چه اطلاعاتی در String می یاد یا نمی یاد

Hossis
جمعه 20 آذر 1388, 08:50 صبح
اول این خط رو در ابتدای صفحه کد وارد کن شاید درست شد
Option Compare Text
بعد هم می تونید از تابع CompareTo یا خاصیت Equal استفاده کنید

rezabnm
جمعه 20 آذر 1388, 09:25 صبح
آره اطلاعات لود ميشه براي تست اين كار يه ليبل گذاشتم تا بعد از اينكه اطلاعات رو از ديتابيس خوند اول تو اون (خاصيتtext) قرار بده بعد مقايسه كنه ولي لود ميكرد و تو ليبل نشون ميداد ولي هنگام مقايسه عمل نمي كرد از مهندسhossis هم ميخوام اگه بشه يكم توضيحات بيشتري بده من بلد نيستم چه جوري! ممنون ميشم.

rezabnm
جمعه 20 آذر 1388, 12:00 عصر
يه سوال خيلي مهم مگه اطلاعاتي كه ما تو ديتابيس ذخيره ميكنيم به صورت رشته با كد اسكي خاصي ذخيره ميشن! چون من وقتي تو برنامم از يه رشته ايكه تو خود برنامه تعريف كرده بودم خواستم با اونچيزي كه كاربر تو textbox وارد ميكنه مقايسه كنم حتي با دستور string.compare(--,--)درست عمل ميكنه اماو قتي ميخوام همون رشته رو از ديتابيس بخونه ومقايسه كنه همش 1- بر ميگردونه كدمم پاين ميذارم (باتوضيح):
Imports System.Data
Imports System.Data.SqlClient
Public Class Form1

'تابع است كه با فراخواني او اطلاعات از ديتابيس خوانده ميشه
Sub reader()

Dim bnn As New objconnction
دوشيع از نوع رشته تعريف كردم
Dim stri, bb As String
bnn.conn.Open()
اگر كه كاربر در داخل textboxهيچ مقداري را وارد نكرده بود به كاربر پيغام ميده كه بايد مقداري را داخل textbox وارد كني در غير اينصورت اطلاعات ستون userman از جدول info_user ميخونه تا زماني كه ركوردي وجود داشته باشه
If TextBox1.Text.Length <= 0 Then
MsgBox("لطفا نام خود را وارد كنيد", MsgBoxStyle.OkOnly)
Else

bnn.dread = bnn.cmd.ExecuteReader
While bnn.dread.Read()
مقداري كه كاربر در داخل textbox وارد كرده در داخل رشته قرار ميگيره
stri = TextBox1.Text
برا ي اينكه مطمن شم اون رو تو يه ليبل ريختم تا نشون بده
Label5.Text = stri
حالا يه مقدار رو از ديتابيس ميخونم و تو يه متغير از نوع رشته قرار ميدم
bb = bnn.dread("username").ToString()
براي اينكه مطمن شم اون رو هم تو يه ليبل فرار دادم تا نشون بده كه اين كار انجام شده
Label6.Text = bb
حالا اين دوتا رشته بدست اومده رو با هم مقايسه ميكنم
l = String.Compare(stri, bb)
چون با اين دستور يك مقدار عددي برگردونده ميشه اون مقدار رو هم تو يه ليبل ريختم تا ببينم نتيجه چي بر ميگردونه
label7.text = l
حالا ميگم كه اگه دو رشته باهم برابر بود اين پيغام رو نشون بده وگر نه كه پيغام ديگه ايرو
If l = 0 Then
TextBox2.Text = bb
MsgBox("رمز شما صحيح است", MsgBoxStyle.OkOnly)
Else
TextBox1.Clear()
MsgBox("رمز شما صحيح نيست", MsgBoxStyle.OkOnly)
Exit While
End If
End While
End If
bnn.conn.Close()
End Sub
اينم كلاسي كه ازش براي ارطبات بر قرار كردن استفاده ميكنم
Public Class objconnction
Private path As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\reza\My Documents\Visual Studio 2005\Projects\test1\test1\infoentekabat.mdf;Integr ated Security=True;User Instance=True"
Public conn As SqlConnection = New SqlConnection(path)
Private str As String = "SELECT * FROM info_user"
Public cmd As SqlCommand = New SqlCommand(str, conn)
Public dread As SqlDataReader
End Class

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
reader()
End Sub

End Class


از دوستان خواهش دارم تا من رو راهنماي كنن واگه روش بهتري دارن بگن ممنون ميشم