2012-03-29 3 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 

End Class

+1

Пожалуйста, пост более описательное название - то, что описывает проблему вы имеете. Простое копирование тегов не помогает. – Oded

ответ

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         это имя столбца Идентификатор типа пользователя
  • @UserTypeID     это имя типа пользователя id (новое значение)
  • Username                 это имя столбца Имя пользователя
  • @Username             это имя параметра имени пользователя
  • Вы, возможно, придется изменить эти имена в порядке чтобы соответствовать вашей реальной ситуации.

    +0

    , который дал мне ошибку в инструкции sql – Brian

    +0

    Какая ошибка? Пожалуйста, покажите нам сообщение об ошибке! –

    +0

    Я добавил некоторые разъяснения. –

    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

    ahh спасибо! Полностью пропустил это! – Brian

    +0

    Я перепробовал код, но он по-прежнему не обновляется. Я использовал ваш, а затем попытался немного изменить его, но все это никак не повлияло! Я обновил код в вопросе – Brian

    +0

    Если в вашем коде должен быть 'SET [UserTypeID] = @ UserTypeID', а не только' SET @ UserTypeID'. '[UserTypeID]' - это имя столбца таблицы. '@ UserTypeID' - это имя параметра. –

    Смежные вопросы