Ошибка обновления доступа - PullRequest
1 голос
/ 12 мая 2009
    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()

Команда обновления, приведенная ниже, постоянно выдаёт мне эту ошибку: «Преобразование из строки» «WHERE [Имя пользователя] =» в тип «Double» недопустимо ». и я не знаю почему. Поле aUserName является полем String, и я проверил, чтобы оно было заполнено.

            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

Ответы [ 2 ]

5 голосов
/ 12 мая 2009

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

Wrong

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 голосов
/ 12 мая 2009

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

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

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

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

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

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

...