Почему мой UPDATE вызывает ошибку «Синтаксическая ошибка в строке в выражении запроса»? - PullRequest
0 голосов
/ 25 апреля 2019

Я могу выполнить инструкцию Access SQL INSERT без ошибок, но когда я пытаюсь UPDATE с кодом ниже, он выдает ошибку:

"Синтаксическая ошибка в строке в выражении запроса".

Почему это происходит и как я могу это исправить?

Вот мой код ..

    Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
    If txtName.Text = Nothing Or dtpDateBirth.Text = Nothing Or txtPhoneNumber.Text = Nothing Or txtEmail.Text = Nothing Or txtID.Text = Nothing Or mtbNPWP.Text = Nothing Or rtbAddress.Text = Nothing Or txtVillage.Text = Nothing Or txtSubDistrict.Text = Nothing Or txtCity.Text = Nothing Or txtPostalCode.Text = Nothing Or txtEmergencyName.Text = Nothing Or txtEmergencyNumber.Text = Nothing Or txtEmergencyEmail.Text = Nothing Then
        MsgBox("No data has been update", MsgBoxStyle.Information, "No data edit")
        Exit Sub
    Else
        Call koneksi()
        cmd = New OleDb.OleDbCommand("update t_customer set name='" & txtName.Text & "', date_birth='" & dtpDateBirth.Text & "', phone_number='" & txtPhoneNumber.Text & "', email='" & txtEmail.Text & "', id='" & txtID.Text & "', npwp='" & mtbNPWP.Text & "', address='" & rtbAddress.Text & "', village='" & txtVillage.Text & "', sub_district='" & txtSubDistrict.Text & "', city='" & txtCity.Text & "', postal_code='" & txtPostalCode.Text & "', gender='" & gen & "', emergency_name='" & txtEmergencyName.Text & "', phone_emergency='" & txtPhoneNumber.Text & "', email_emergency='" & txtEmergencyEmail.Text & "' where [codeCust]='" & txtIDCust.Text, conn)
        cmd.ExecuteNonQuery()
        MsgBox("Update data success!", MsgBoxStyle.Information, "Update")
    End If
    Call disabled()
    Call showData()
End Sub

Ответы [ 2 ]

2 голосов
/ 25 апреля 2019

Как подсказал HansUp со ссылкой, вы должны использовать параметры.Также вы не располагаете команду.Также AFAIK (я думал) вам нужно было открыть соединение, прежде чем вы сможете выполнить ExecuteNonQuery.Что касается несоответствия данных, которое вы испытываете, я думаю, это потому, что у вас есть 'в предложении where, которого не должно быть, при условии, что ID является INT.

    Using OledbConn As New OleDbConnection("Conn String")

        OledbConn.Open()
        Using t_customerCMD As New OleDbCommand("UPDATE t_customer SET [Col1]=@Col1,[Col2]=@Col2 WHERE [codeCust]=@codeCust", OledbConn)
            With t_customerCMD
                .Parameters.Add("@Col1", SqlDbType.VarChar).Value = TextBox1.Text
                .Parameters.Add("@Col2", SqlDbType.VarChar).Value = TextBox2.Text
                .Parameters.Add("@codeCust", SqlDbType.Int).Value = CInt(txtIDCust.Text) 'Assumes ID is integer
                .ExecuteNonQuery()
            End With
        End Using
        OledbConn.Close()

    End Using
End Sub
0 голосов
/ 25 апреля 2019

Спасибо всем, кто мне помог.Я вам очень благодарен.Эта проблема была решена.это мой код завершения, который я наконец могу сделать, чтобы обновить базу данных.

   Sub updateData()
    Call gender()
    If String.IsNullOrEmpty(txtName.Text) OrElse String.IsNullOrEmpty(dtpDateBirth.Text) OrElse String.IsNullOrEmpty(txtPhoneNumber.Text) OrElse String.IsNullOrEmpty(txtEmail.Text) OrElse String.IsNullOrEmpty(txtID.Text) OrElse String.IsNullOrEmpty(mtbNPWP.Text) OrElse String.IsNullOrEmpty(rtbAddress.Text) OrElse String.IsNullOrEmpty(txtVillage.Text) OrElse String.IsNullOrEmpty(txtSubDistrict.Text) OrElse String.IsNullOrEmpty(txtCity.Text) OrElse String.IsNullOrEmpty(txtPostalCode.Text) OrElse String.IsNullOrEmpty(txtEmergencyName.Text) OrElse String.IsNullOrEmpty(txtEmergencyNumber.Text) OrElse String.IsNullOrEmpty(txtEmergencyEmail.Text) Then
        MsgBox("No data has been update", MsgBoxStyle.Information, "No data edit")
        Exit Sub
    Else
        Try
            Call koneksi()
            Using cmd = New OleDb.OleDbCommand("update t_customer set name='" & txtName.Text & "', date_birth='" & dtpDateBirth.Text & "', phone_number='" & txtPhoneNumber.Text & "', email='" & txtEmail.Text & "', id='" & txtID.Text & "', npwp='" & mtbNPWP.Text & "', address='" & rtbAddress.Text & "', village='" & txtVillage.Text & "', sub_district='" & txtSubDistrict.Text & "', city='" & txtCity.Text & "', postal_code='" & txtPostalCode.Text & "', gender='" & gen & "', emergency_name='" & txtEmergencyName.Text & "', phone_emergency='" & txtPhoneNumber.Text & "', email_emergency='" & txtEmergencyEmail.Text & "' where [codeCust]=@codeCust", conn)
                cmd.Parameters.Add("codeCust", CType(txtIDCust.Text, String))
                cmd.ExecuteNonQuery()
                conn.Close()
                MsgBox("Update data success!", MsgBoxStyle.Information, "Update")
            End Using
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End If
End Sub

Поскольку я использую переключатель для выбора пола, я добавил его, чтобы можно было изменить пол.

Private Sub gender()
    Call koneksi()
    Dim str As String
    str = "Insert into t_customer([gender]) Values (?)"
    Dim cmd As OleDbCommand = New OleDbCommand(str, conn)
    If rdnMale.Checked = True Then
        gen = rdnMale.Text
        cmd.Parameters.Add(New OleDbParameter("gender", CType(gen, String)))
    Else
        gen = rdnFemale.Text
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...