VB表单INSERT INTO语句,更改密码表单

时间:2014-02-15 16:18:06

标签: vb.net vba validation ms-access insert

嘿,我正在研究一个学校项目,并遇到了一些问题

我正在尝试更改密码表单。我有一个名为“tblLogin”的访问表,其中包含Username,Password,SecQuest,SecAns,Level列。

用户名是一个公共变量,属于我的登录表单

程序当前没有更改tblLogin表中的密码值

我认为我的INSERT INTO语句存在问题

提前感谢您提供任何帮助!

 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    Dim sql As String

    Dim Conn As New OleDb.OleDbConnection("PROVIDER = Microsoft.ACE.OLEDB.12.0;Data Source = C:\Users\Nelson\Documents\SystemDB\DB.accdb")
    Dim ds As New DataSet
    Dim da As OleDb.OleDbDataAdapter
    Dim response As Integer

    Try


    Conn.Open()
    'establishes communication with the database
    sql = "SELECT Password FROM tblLogin WHERE Username = """ & LoginForm.username & """"
    'declares SQL statement
    da = New OleDb.OleDbDataAdapter(sql, Conn)
    'runs sql statement on database 
    da.Fill(ds, "passwordcheck")
    'fills in a dataset called "passwordcheck" with infomation selected by the sql statement

        If TextBox1.Text = TextBox2.Text And TextBox3.Text = TextBox4.Text And TextBox1.Text = ds.Tables("passwordcheck").Rows(0).Item(0) And TextBox1.Text <> "" And TextBox2.Text <> "" And TextBox3.Text <> "" And TextBox4.Text <> "" Then
            response = MessageBox.Show("Are you sure?", "Attention", MessageBoxButtons.YesNo)

            If response = MsgBoxResult.Yes Then
                Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand("INSERT INTO tblLogin Password VALUES (?) WHERE Username = """ & LoginForm.username & """", Conn)
                cmd.Parameters.Add("@Password", OleDb.OleDbType.VarChar).Value = TextBox3.Text
                Conn.Close()
            End If
        Else
            MessageBox.Show("Passwords entered are incorrect", "Attention")
        End If

    Catch ex As Exception
        MessageBox.Show("Passwords entered are incorrect", "Attention")
    End Try

End Sub

1 个答案:

答案 0 :(得分:2)

PASSWORD是MS-Access的保留关键字。如果要将其用于列名,请将其括在sqare括号中。说,请使用参数化查询为您的命令。

Conn.Open()
'establishes communication with the database
sql = "SELECT [Password] FROM tblLogin WHERE Username = ?"
'declares SQL statement
da = New OleDb.OleDbDataAdapter(sql, Conn)
da.SelectCommand("@p1", LoginForm.username)
.....

最后,INSERT子句不需要WHERE语句 (没有意义为INSERT选择一些行设置条件)

Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand("INSERT INTO tblLogin [Password] " & _
                                "VALUES (?) "

但是看看你的代码,那么你可能需要UPDATE而不是INSERT

Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand("UPDATE tblLogin " & _ 
                                "SET [Password] = ? WHERE Username ?"
cmd.Parameters.Add("@Password", OleDb.OleDbType.VarChar).Value = TextBox3.Text
cmd.Parameters.Add("@Username", OleDb.OleDbType.VarChar).Value = TEXTBOXFORUSERNAME.Text

---最重要的是---

cmd.ExecuteNonQuery()

如果不这样做,则不会尝试更新数据库表