2012-03-29 95 views
0

我有一個按鈕,當按下時,在db中設置用戶權限。 (如果管理員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 

末級

+1

請張貼一個更具描述性的標題 - 這是描述你所遇到的問題。簡單地複製標籤並沒有幫助。 – Oded 2012-03-29 15:33:37

回答

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 

UPDATE(一些澄清)

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

  • [User]                        是表
  • UserTypeID        的名稱是用戶類別ID欄
  • @UserTypeID    的名稱的用戶類型的名稱id參數(新值)
  • Username                是用戶名欄中
  • @Username            的名稱,用戶名參數的名稱
  • 您可能必須爲了改變這些名稱以符合您的實際情況。

    +0

    那給了我一個sql語句中的錯誤 – Brian 2012-03-29 16:21:46

    +0

    哪個錯誤?請告訴我們錯誤信息! – 2012-03-29 16:39:05

    +0

    我補充說明一下。 – 2012-03-29 16:53:36

    0

    你只執行選擇查詢 - 這不會修改任何數據。

    您將需要使用更新查詢,爲用戶名和用戶權限編號提供參數。

    0

    您正在做SELECT而不是UPDATE ...

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

    應該

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

    啊謝謝!完全錯過了! – Brian 2012-03-29 15:44:23

    +0

    我重新嘗試了代碼,但仍未更新。我用你的,然後試圖修改它,但一切都沒有效果!我更新了問題 – Brian 2012-03-29 16:19:01

    +0

    中的代碼如果在代碼中應該是'SET [UserTypeID] = @ UserTypeID',而不是'SET @ UserTypeID'。 '[UserTypeID]'是表格列的名稱。 '@ UserTypeID'是參數的名稱。 – 2012-03-29 16:41:41

    相關問題