如何以编程方式更新数据库表?

时间:2012-03-29 15:30:45

标签: asp.net sql vb.net ms-access

我有一个按钮,按下该按钮后,设置用户在数据库中的权限。 (如果管理员UserTypeID设置为'2',如果客户设置为'1')。但是当我运行下面的代码时,一切都保持不变。我认为这是来自SQL语句,但我不确定。有人可以帮忙吗?

Protected Sub btnSetUser_Click(sender As Object, e As System.EventArgs) _
    Handles btnSetUser.Click

    Dim conn As New OleDbConnection( _
      "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\...\WebSite3\db.mdb;")

    Dim cmd As OleDbCommand = _
      New OleDbCommand("UPDATE [User] SET [UserTypeID] WHERE Username=?", conn)

    conn.Open()
    cmd.Parameters.AddWithValue("@Username", txtUser.Text)

    If ddUserType.SelectedItem.Text = "Administrator" Then
        cmd.Parameters.AddWithValue("@UserTypeID", "2")
        cmd.ExecuteNonQuery()
        lblSetUser.Text = txtUser.Text + "was set to Administrator."
    ElseIf ddUserType.SelectedItem.Text = "Customer" Then
        cmd.Parameters.AddWithValue("@UserTypeID", "1")
        cmd.ExecuteNonQuery()
        lblSetUser.Text = txtUser.Text + "was set to Customer."
    End If

    conn.Close()
End Sub

结束班

3 个答案:

答案 0 :(得分:0)

您只执行选择查询 - 根本不会修改任何数据。

您将需要使用更新查询,为用户名和用户权限编号提供参数。

答案 1 :(得分:0)

如果添加参数@Username,则命令应具有此参数

SELECT [UserTypeID] FROM [User] WHERE Username = @Username

此外,您稍后会添加一个附加参数,在查询中根本不会发生!您调用cmd.ExecuteNonQuery(),它仅适用于INSERT,UPDATE和DELETE查询。

您的查询可能看起来像这样

UPDATE [User]
SET UserTypeID = @UserTypeID
WHERE Username = @Username

Dim cmd As OleDbCommand = New OleDbCommand( _
  "UPDATE [User] SET UserTypeID = @UserTypeID WHERE Username = @Username", conn)

Dim userType As String = ddUserType.SelectedItem.Text
Dim userTypeId As Integer = If(userType = "Administrator", 2, 1)

cmd.Parameters.AddWithValue("@UserTypeID", userTypeId)
cmd.Parameters.AddWithValue("@Username", txtUser.Text)             
conn.Open()
cmd.ExecuteNonQuery()
lblSetUser.Text = txtUser.Text + "was set to " & userType

更新(一些澄清)

"UDATE [User] SET UserTypeID = @UserTypeID WHERE Username = @Username"

  • [User]是表格的名称
  • UserTypeID是用户类型ID列的名称
  • @UserTypeID是用户类型id参数(新值)
  • 的名称
  • Username是用户名列的名称
  • @Username是用户名参数的名称
  • 您可能需要更改这些名称才能符合实际情况。

    答案 2 :(得分:0)

    您正在进行SELECT而不是UPDATE ...

    New OleDbCommand("SELECT [UserTypeID] FROM [User] WHERE Username=?", conn)
    

    应该是

    New OleDbCommand("UPDATE [User] SET [UserTypeID] = @UserTypeID WHERE Username = @Username", conn)