2013-07-06 28 views
0

需要你的幫助下面的編碼,即時嘗試創建登錄表單在vb.net但系統顯示錯誤「運算符'='不是定義爲'Nothing'並鍵入'OleDbCommand'「。下面運營商的'='沒有被定義爲'沒有',並輸入'OleDbCommand'

是我的編碼

enter code here 


    Dim MyOledbCommand As OleDbCommand = New OleDbCommand() 

    If MyCommand = New OleDbCommand("SELECT * FROM Login WHERE username = '" & txtuser.Text & "' and password ='" & _ 
           txtpass.Text & "'", OleDbConn) Then 
     MsgBox("Login Success") 
     Form1.Show() 
    Else 
     MsgBox("Login Failed") 

    End If 
+0

嗨保羅,你能告訴我這個例子嗎?謝謝 – user2334112

回答

2

創建一個新的OleDbCommand實際上並不打算執行它在所有,也不是一個If聲明有效的條件。我懷疑你想要的東西,如:

Dim sql = "SELECT COUNT(*) FROM Login WHERE username = ? and password = ?" 
Dim count As Integer 
Using command As OleDbCommand = New OleDbCommand(sql, OleDbConn) 
    command.Parameters.Add("@User", OleDbType.VarChar).Value = txtuser.Text 
    command.Parameters.Add("@Password", OleDbType.VarChar).Value = txtpass.Text 
    count = CInt(command.ExecuteScalar()) 
End Using 

If count > 0 Then 
    MsgBox("Login Success") 
    Form1.Show() 
Else 
    MsgBox("Login Failed") 

確切語法可能稍有偏差(我不是一個VB程序員),但它的精神應該沒問題。備註:

  • 我正在使用Using語句,以便命令自動放置在塊的末尾。你應該爲你的連接做同樣的事情....如果你想讓整個程序保持相同的連接,你不應該這樣做。讓連接池管理它。
  • 我使用參數化的SQL,而不是直接將值放入SQL中。這對於避免SQL injection attacks很重要。即使這只是一個玩具項目,你應該立即習慣參數化SQL。
  • 我正在選擇行數爲的數字而不是行本身。我們只需要知道是否有任何符合條件的有效用戶。
  • 你不應該在UI線程中這樣做(或任何其他數據庫工作)。使用BackgroundWorker或異步方法。
  • 你應該從來沒有以明文存儲密碼,因爲它顯示你在這裏。我真的希望這是一款玩具應用,因爲目前它絕對不安全。再次嘗試儘早進入良好習慣。
+0

完成,謝謝Jon Skeet,感謝 – user2334112