代碼如下,是之前網上的大神碼的。其中有一個問題:當用戶名正確密碼錯誤時,還是可以登陸,無法顯示“密碼錯誤!請重新輸入密碼!” 請各位大神幫助!!!
Public Class Form1
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
End
End Sub
Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
If TextBox1.Text = "" Then
MsgBox("用戶名不能為空! 請先輸入用戶名后再登陸")
TextBox1.Focus()
Else
Dim cnn As New OleDb.OleDbConnection
cnn.ConnectionString = "provider=Microsoft.Jet.oledb.4.0;Data source='C:\Users\chao\Desktop\我的畢業設計\資料庫1.mdb'"
cnn.Open()
Dim ds As New DataSet
Dim da As New OleDb.OleDbDataAdapter("select * from [user]", cnn)
cnn.Close()
da.Fill(ds, "user")
If ds.Tables(0).Rows.Count <> 0 Then
Dim sql As String = "select * from [user] where username='" & Trim(TextBox1.Text) & "'"
Dim da1 As New OleDb.OleDbDataAdapter(sql, cnn)
Dim ds1 As New DataSet
da1.Fill(ds1, "user")
If ds1.Tables(0).Rows.Count = 0 Then
MsgBox("用戶名錯誤!")
TextBox1.Text = ""
TextBox1.Focus()
Else
If TextBox2.Text = "" Then
MsgBox("請輸入密碼!")
TextBox2.Focus()
Else
Dim sq2 As String = "select password from user where username=" & Trim(TextBox1.Text) & " and password=" & Trim(TextBox2.Text) & ""
Dim da2 As New OleDb.OleDbDataAdapter(sql, cnn)
Dim ds2 As New DataSet
da2.Fill(ds2, "user")
If ds2.Tables(0).Rows.Count = 0 Then
MsgBox("密碼錯誤!請重新輸入密碼!")
TextBox2.Text = ""
TextBox2.Focus()
Else
Me.Hide()
Form2.Show()
End If
End If
End If
End If
End If
End Sub
End Class
uj5u.com熱心網友回復:

uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
那說明你邏輯判斷有問題唄,不會debug?是你寫的么?uj5u.com熱心網友回復:
寫個方法直接給你使用吧。重點是紅色那句
Public Function getpsw(ByVal s As String) As String
Try
Public cmd As New OleDbCommand
cmd.Connection = =cnn
cmd.CommandText = s
getpsw= IIf(IsDBNull(cmd.ExecuteScalar), "", cmd.ExecuteScalar) & ""
Catch ex As Exception
getpsw= ""
End Try
End Function
uj5u.com熱心網友回復:
其中s是資料庫查詢陳述句。把你的查詢陳述句代入進去就行了 "select password from user where username=" & Trim(TextBox1.Text) & " and password=" & Trim(TextBox2.Text) & ""uj5u.com熱心網友回復:
sq2陳述句錯誤,沒有單引號。id 和密碼怎么可能是純數值?你覺得呢!uj5u.com熱心網友回復:
請問正確的陳述句
這個不是我寫的...只是在網上抄網友的....
我的資料庫不熟..想直接碼代碼,還望海涵
uj5u.com熱心網友回復:
我修改成這樣子還是不行啊(請看紅色的陳述句,還是會出現密碼錯誤但是無法顯示提示而是直接登錄的情況)
求大神支招!Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
If TextBox1.Text = "" Then
MsgBox("用戶名不能為空! 請先輸入用戶名后再登陸")
TextBox1.Focus()
Else
Dim cnn As New OleDb.OleDbConnection
cnn.ConnectionString = "provider=Microsoft.Jet.oledb.4.0;Data source='C:\Users\chao\Desktop\我的畢業設計\資料庫1.mdb'"
cnn.Open()
Dim ds As New DataSet
Dim da As New OleDb.OleDbDataAdapter("select * from [user]", cnn)
cnn.Close()
da.Fill(ds, "user")
If ds.Tables(0).Rows.Count <> 0 Then
Dim sql As String = "select * from [user] where username='" & Trim(TextBox1.Text) & "'"
Dim da1 As New OleDb.OleDbDataAdapter(sql, cnn)
Dim ds1 As New DataSet
da1.Fill(ds1, "user")
If ds1.Tables(0).Rows.Count = 0 Then
MsgBox("用戶名錯誤!")
TextBox1.Text = ""
TextBox1.Focus()
Else
If TextBox2.Text = "" Then
MsgBox("請輸入密碼!")
TextBox2.Focus()
Else
Dim sq2 As String = "select password from [user] where username='" & Trim(TextBox1.Text) & "' and password='" & Trim(TextBox2.Text) & "'"
Dim da2 As New OleDb.OleDbDataAdapter(sql, cnn)
Dim ds2 As New DataSet
da2.Fill(ds2, "user")
If ds2.Tables(0).Rows.Count = 0 Then
MsgBox("密碼錯誤!請重新輸入密碼!")
TextBox2.Text = ""
TextBox2.Focus()
Else
Me.Hide()
Form2.Show()
End If
End If
End If
End If
End If
End Sub
End Class
uj5u.com熱心網友回復:
請問能在我原來的基礎上進行修改嗎?我真的是小白,不太懂,能不能求大神把完整一點的陳述句碼給我,萬分感謝!!
uj5u.com熱心網友回復:
sql2,cnn你的2漏了吧?
uj5u.com熱心網友回復:
驗證部分改成下面這個:
If getpsw( "select password from user where username=‘" & Trim(TextBox1.Text) & “’”)<>trim( TextBox2.Text ) Then
MsgBox("密碼錯誤!請重新輸入密碼!")
TextBox2.Text = ""
TextBox2.Focus()
Else
Me.Hide()
Form2.Show()
End If
uj5u.com熱心網友回復:
你連SQL語法都搞錯了,字符的值是要帶單引號括起來的。不然系統默認為列名,那樣查詢肯定不對了。uj5u.com熱心網友回復:
抱歉大神,如果直接輸入的話會出現下面這種情況

好像是沒有定義getpsw,請問該如何改進?是要在程式的開頭加上這些陳述句嗎?
Public Function getpsw(ByVal s As String) As String
getpsw= IIf(IsDBNull(cmd.ExecuteScalar), "", cmd.ExecuteScalar) & ""
本人真心小白,還望大神耐心指導,謝謝!!
uj5u.com熱心網友回復:
Public Class Form1Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
End
End Sub
Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
If TextBox1.Text = "" Then
MsgBox("用戶名不能為空! 請先輸入用戶名后再登陸")
TextBox1.Focus()
Else
Dim cnn As New OleDb.OleDbConnection
cnn.ConnectionString = "provider=Microsoft.Jet.oledb.4.0;Data source='C:\Users\chao\Desktop\我的畢業設計\資料庫1.mdb'"
cnn.Open()
Dim ds As New DataSet
Dim da As New OleDb.OleDbDataAdapter("select * from [user]", cnn)
da.Fill(ds, "user")
If ds.Tables(0).Rows.Count <> 0 Then
Dim sql As String = "select * from [user] where username='" & Trim(TextBox1.Text) & "'"
Dim da1 As New OleDb.OleDbDataAdapter(sql, cnn)
Dim ds1 As New DataSet
da1.Fill(ds1, "user")
If ds1.Tables(0).Rows.Count = 0 Then
MsgBox("用戶名錯誤!")
TextBox1.Text = ""
TextBox1.Focus()
Else
If TextBox2.Text = "" Then
MsgBox("請輸入密碼!")
TextBox2.Focus()
Else
If getpsw( "select password from user where username=‘" & Trim(TextBox1.Text) & “’”)<>trim( TextBox2.Text ) Then
MsgBox("密碼錯誤!請重新輸入密碼!")
TextBox2.Text = ""
TextBox2.Focus()
Else
Me.Hide()
Form2.Show()
End If
End If
End If
cnn.Close()
End If
End If
End Sub
Public Function getpsw(ByVal s As String) As String
Try
Public cmd As New OleDbCommand
cmd.Connection = =cnn
cmd.CommandText = s
getpsw= IIf(IsDBNull(cmd.ExecuteScalar), "", cmd.ExecuteScalar) & ""
Catch ex As Exception
getpsw= ""
End Try
End Function
End Class
uj5u.com熱心網友回復:
運行后出錯....

uj5u.com熱心網友回復:
密碼控制元件寫什么都可以進去了 ,咋弄。。。uj5u.com熱心網友回復:
關于單引號的問題你多除錯幾下就能解決。我這個給你另外的建議:1.建議你把用戶名和密碼一塊查詢;2.用OleDbDataReader判斷HasRows。 這樣你的代碼就變得很簡單了。
uj5u.com熱心網友回復:
我有寫一個,是SQL的.你要不,uj5u.com熱心網友回復:

我只是想說你嵌套這么多層的if else 看著不累么
If TextBox1.Text = "" Then
MsgBox("用戶名不能為空! 請先輸入用戶名后再登陸")
TextBox1.Focus()
exit sub
end if
……
If ds1.Tables(0).Rows.Count = 0 Then
MsgBox("用戶名錯誤!")
TextBox1.Text = ""
TextBox1.Focus()
exit sub
end if
……
這樣邏輯不是清楚的多。
而且不就是驗證個用戶名密碼嘛,沒事你老查資料庫干嘛,前面第一次用select * from [user] where username=……的時候不是已經把password欄位的內容回傳來了,那后面還查個屁啊,直接判斷ds1.tables(0).rows(0).item("password")值和textbox2的內容是不是相等不就完事了,當然判斷之前最好先檢查一下ds1.tables(0).rows.count的值,=0沒有這個用戶,=1有這個用戶可以去檢查密碼,>1話說用戶名會出現重復?
uj5u.com熱心網友回復:
Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.ClickIf TextBox1.Text = "" or TextBox2.Text="" Then
MsgBox("用戶名或密碼不能為空!")
TextBox1.Focus()
Exit Sub
End if
Dim cnn As New OleDb.OleDbConnection
cnn.ConnectionString = "provider=Microsoft.Jet.oledb.4.0;Data source='C:\Users\chao\Desktop\我的畢業設計\資料庫1.mdb'"
cnn.Open()
Dim strSql as string="select count(password) from [user] where username='" & TextBox1.Text & "' and password='" & TextBox2.Text & "'"
dim cmd as New OleDb.OleDbCommand(strSql, cnn)
Dim i As Integer= cmd.ExecuteScalar()
If i=0 Then
msgBox("用戶名或密碼錯誤,請重新輸入",16)
Exit Sub
End if
End Sub
uj5u.com熱心網友回復:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Clickcn = New OleDbConnection(“"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" ……";Persist Security Info=False"")
cn.Open()
cm = New OleDbConnection("select count(*) from login where name ='" + 用戶名.Text + "'And password ='" + 密碼框.Text + "'", cn)
If cm.ExecuteScalar > 0 Then
'MsgBox("密碼正確,進入系統!")
Else
MsgBox("密碼錯誤,請重新輸入!")
Me.Close()
End If
cn.Close()
End Sub
uj5u.com熱心網友回復:
這個應該可以的 。。。
uj5u.com熱心網友回復:
直接在SQL陳述句中密碼欄位,不怕注入式攻擊么?建議建立一個用戶物件然后 new 這個物件通過屬性去驗證密碼比較好一些吧。uj5u.com熱心網友回復:
邏輯設計問題,用一張紙、一支筆就能設計和分析。把邏輯搞清楚再debug代碼。
uj5u.com熱心網友回復:
他的意思是,看著累,就容易有邏輯 bug。
對代碼進行重構和簡化代碼風格,也是能提高開發效率的。
uj5u.com熱心網友回復:
開發時肯定是要除錯Dim sq2 As String = "select password from................
.....
ds2.Tables(0).Rows[0][0]
之類的代碼和變數,然后提出邏輯一致性分析。
看一個人編程技術到底怎么樣,并不是看他(她)代碼是從哪里抄來的,而是從除錯技術開始看。
uj5u.com熱心網友回復:
大佬們破案沒有,學習下
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/82394.html
標籤:VB.NET
