我使用以下代碼連接到Access數據庫,並檢查用戶的名稱是否添加到表中,如果它們是,則根據他們屬於哪個表直接影響他們對軟件的訪問級別。VB.Net代碼退出例程,如果沒有執行'Else'命令,如果語句
Public Sub Check_Database_For_Access_Level(Name As String)
Dim myCon = New OleDbConnection(My.Settings.Database_Connection_String)
myCon.Open()
Dim dr As OleDbDataReader
Dim Str
Str = "SELECT * FROM [Admin] WHERE [Emp Name]=?"
Dim cmd As OleDbCommand = New OleDbCommand(Str, myCon)
cmd.Parameters.AddWithValue("Emp Name", Name)
dr = cmd.ExecuteReader
dr.Read()
If dr("Emp Name").ToString = Name Then 'ERROR HERE
My.Settings.Setting_AccessLevel = "Administrator"
Else
Str = "SELECT * FROM [ReadWrite] WHERE [Emp Name]=?"
cmd.Parameters.AddWithValue("Emp Name", Name)
dr = cmd.ExecuteReader
dr.Read()
If dr("Emp Name").ToString = Name Then
My.Settings.Setting_AccessLevel = "Read And Write"
Else
End If
End If
myCon.Close()
End Sub
行:
If dr("Emp Name").ToString = Name Then 'ERROR HERE
工作,因爲它應該是,如果結果爲真,但如果是假的,子乾脆退出?
它怎麼沒有發射Else
部分?即使通過它只是退出。
有一個例外是在這裏悄然吞噬(我的猜測是你的方法被從你的主窗體的'Load'事件調用處理程序或類似的)。將'Try/Catch'放在'Check_Database_For_Access_Level'的調用中,看看它是什麼。 –
也許它是拋出一個異常 - 可能是'NullReferenceException',因爲我猜如果用戶不在管理表中,dr(「Emp Name」)'將爲空,這意味着你不能調用' .ToString'就可以了,所以錯誤。試試'如果dr(「Emp Name」)IsNot Nothing AndAlso dr(「Emp Name」)。ToString()= Name Then' –
'myCon.Close()'應該放在finally塊中 –