none
VB2003 從資料庫讀取資料 RRS feed

  • 問題

  •  

    以下是我把新增資料到資料庫的程式碼做修改後

    弄成是從資料庫裡面尋找輸入的帳號密碼

    如果成功就會登入

    不成功會顯示失敗的視窗

     

    Private Sub btnCreate_Click ()

    adpAccounts.SelectedCommand = New OleDbCommand

    With adpAccounts.SlectedCommand

       Try

       .Connection = conAccounts

       .CommandText = "select * from Account where [User]='" & txtUser.Text & "' and [Password]='" & txtPW.Text & "' "

       .CommandType = CommandType.Text

       conAccounts.Open ( )

       .ExecuteNonQuery ( )

       MessageBox.Show("Success")

       Catch ex As exception

       MessageBox.Show("Fail")

    End With

    End Sub

     

    但是,實行除錯後,有錯誤

    不知道要怎麼修改才能順利的

    從資料庫內,尋找以輸入的帳號密碼 (並進行登入)

     

    不知道是不是我程式碼完全寫錯!?

    2008年3月3日 上午 08:07

解答

所有回覆

  • Hi,

    ExecuteNonQuery陳述式的意義是執行一個"不會傳回結果集"的指令,通常用在Update或是Insert的情況下,查詢是否已經有紀錄存在應該用ExecuteReader的方法去產生一個DataReader,之後判斷有沒有相關紀錄存在。

    MSDN上的教學課程,趕快K一下。

    http://www.microsoft.com/taiwan/msdn/elearning/adodotnet.htm

     

    2008年3月3日 上午 08:25
    版主
  • 你的組合方式符合隱碼攻擊的漏洞,這是程式設計師的責任,請搜尋相關討論。

     

    帳號密碼通常我都會只查詢帳號,傳回結果集,在同時比對一次帳號與密碼。

     

    2008年3月3日 下午 12:28
    版主
  • 下面是我今天在學校弄的程式碼:  (使用Access 2003)

       

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            With adpAccounts.SelectCommand
                .Connection = conAccounts
                .CommandType = CommandType.Text
                Try
                    conAccounts.Open()
                    .ExecuteReader()
                    .CommandText = "Select * from Account where [User]='" & txtUser.Text & "', [Password]='" & txtPW.Text & "' "
                    MessageBox.Show("Login Successfully.")
                Catch ex As Exception
                    MessageBox.Show(ex.Message)
                    txtUser.Text = ""
                    txtPW.Text = ""
                    txtUser.Focus()
                End Try
                conAccounts.Close()
            End With
        End Sub
    End Class

     

    * 表單上只有兩個 Textbox 和 一個 Button

      另外還有 OleDbDataAdapter (更名為adpAccounts) 和 OleDbConnectuion (更名為conAccounts)

     

    結果,我用除錯模式後

    不管,我輸入任何帳號密碼

    都出現 "Login Successfully." 的視窗

    程式不是應該先從資料庫內尋找以及比對

    在Textbox內輸入的內容嗎!?

    之後才顯示成功與否?

     

    ----------------------------------------------------------------

    那,如果要使用SQL指令

    先尋找到指定帳號後

    再比對該帳號的密碼,要怎麼寫呢 @@?

    (因為,我上面的程式碼,好像有問題)

    2008年3月4日 上午 06:31