2009-05-12 8 views
1
Dim conn As OleDbConnection 
    Dim cmd As OleDbCommand 

    Public Sub openDB() 
     conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\VFMS_DB.mdb;" & "Jet OLEDB:System Database=Security.mdw;User ID=Adster;Password=300624;") 
     conn.Open() 
    End Sub 

    Public Function UpdateUser() As Integer 
     Dim retCode As New Integer 

     Try 
      openDB() 
      cmd = conn.CreateCommand() 

Приведенная ниже команда обновления продолжает давать мне эту ошибку: «Преобразование из строки» «ГДЕ [Имя пользователя] = '» для ввода «Двойной» недействителен ». и я не знаю, почему. Поле aUserName является строковым полем, и я проверил, чтобы он был заполнен.Ошибка при обновлении

  cmd.CommandText = "UPDATE Users SET [First Name] = '" & aName & "', [Last Name] = '" & aSurname & "', [Contact Number] = '" & aContactNum & "', [Password] = '" & aPassword & "', [User Rights] = '" & aUserRights + "' WHERE [Username] = '" + aUserName + "' " 

      cmd.ExecuteNonQuery() 
      conn.Close() 

      'rsAddRecs = rsConn.Execute("UPDATE Users ([First Name], [Last Name], [Contact Number], [User Name], [Password], [User Rights]) VALUES ('" & aName & "','" & aSurname & "','" & aContactNum & "','" & aUserName & "','" & aPassword & "','" & aUserRights & "')") 

      retCode = 0 
      'rsConn.Close() 
      Return retCode 

     Catch ex As Exception 
      MessageBox.Show(ex.ToString, ex.Message, MessageBoxButtons.OK) 
      retCode = 1 
      Return retCode 
     End Try 
    End Function 

ответ

5

У вас есть опечатка. Вы используете + Concat символов в конце строки SQL вместо & символов

Неправильные

cmd.CommandText = "UPDATE Users SET [First Name] = '" & aName & _ 
        "', [Last Name] = '" & aSurname & _ 
        "', [Contact Number] = '" & aContactNum & _ 
        "', [Password] = '" & aPassword & "', [User Rights] = '" & _ 
        aUserRights + "' WHERE [Username] = '" + aUserName + "' " 
'       ^      ^  ^

Правильные

cmd.CommandText = "UPDATE Users SET [First Name] = '" & aName & _ 
        "', [Last Name] = '" & aSurname & _ 
        "', [Contact Number] = '" & aContactNum & _ 
        "', [Password] = '" & aPassword & "', [User Rights] = '" & _ 
        aUserRights & "' WHERE [Username] = '" & aUserName & "' " 
'       ^      ^  ^
+0

Мне не хватало очевидного там, спасибо – Domitius

+0

Nice edit codeslave;) – Ropstah

0

Вы SQL-кода используется [Username]:

cmd.CommandText = "UPDATE Users SET ... [Username]... 

В то время как вы закомментировать код, используемый [User Name]:

'rsAddRecs = rsConn.Execute("UPDATE Users ... [User Name]... 

Может неправильное имя столбца быть источником проблемы?

Другая мысль: вы дезинфицировали свои значения параметров, например. может ли значение содержать одну цитату, которая нарушает динамический SQL. В любом случае, я думаю, вам следует рассмотреть возможность использования подготовленных операторов (или даже ПРОЦЕДУРЫ) и использования объектов Parameter для вызова SQL, тем самым откладывая дезинфекцию значений параметров поставщику OLE DB, который, конечно, будет знать больше о предмете, чем ты или я :)

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