OleDbException: отсутствует точка с запятой (;) в конце оператора SQL

Я получил OleDbException, в котором говорится, что «отсутствует точка с запятой (;) в конце инструкции SQL». Я запутался, правильно ли утверждение UPDATE или нет. В моем коде я проверяю оператор обновления с помощью кнопки. Может кто-нибудь помочь мне? Я хочу добавить 1 к переменной, чтобы увеличить ее значение; количество бутылок. Я использую базу данных Microsoft Access. Первичный идентификатор — это ID, а уникальный — room_number.

Это мой код:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    '====test number of bottles=============
    Dim bottlecount As Integer 'variable used in order to increase the value of no. of bottle/s used

    bottlecount = Form3.lblBottle.Text
    bottlecount += 1
    Form3.lblBottle.Text = bottlecount

    roomhold = 1

    Dim statement As String = "UPDATE tblPatientInfo SET bottle_used='" & bottlecount & "' WHERE room_number= '" & roomhold & "' ORDER BY ID ;"
    Dim cmd As New OleDbCommand

    With cmd
        .CommandText = statement
        .Connection = Conn
        Conn.Open()
        .ExecuteNonQuery()
    End With
    Conn.Close()

End Sub

===после применения изменений========== Это мой код:

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim bottlecount As Integer = CInt(Form3.lblBottle.Text) + 1
    Form3.lblBottle.Text = bottlecount

    roomhold = 1

    Dim statement As String = "UPDATE tblPatientInfo SET bottle_used = @bottlecount"
    statement &= "WHERE room_number = @roomhold"

     Dim cmd As New OleDbCommand

    With cmd

        .Connection = Conn
        .CommandType = CommandType.Text
        .CommandText = statement
        .Parameters.AddWithValue("@bottlecount", bottlecount)
        .Parameters.AddWithValue("@roomhold", roomhold)
        Conn.Open()
        .ExecuteNonQuery()
    End With

Соединение.Закрыть()

Любая помощь будет оценена по достоинству. Спасибо!


person Catherine Takishima    schedule 11.09.2012    source источник


Ответы (2)


UPDATE не может иметь пункт ORDER BY. Если вы хотите, чтобы обновление было упорядоченным, создайте его подзапрос, который содержит упорядоченный список обновлений. При использовании ADONet убедитесь, что ваш запрос является параметрами. Привыкайте к SQLCommand and Parameters. Попробуйте этот отредактированный код, если он вам подойдет

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim bottlecount As Integer = cint(Form3.lblBottle.Text) + 1
    Form3.lblBottle.Text = bottlecount

    Dim roomhold AS Integer = 1

    Dim statement As String = "UPDATE tblPatientInfo SET bottle_used = @bottlecount " 
    statement &= "WHERE room_number = @roomhold  "
    Using conn as New SqlConnection("ConnectionStringHere")
        Using comm as New SqlCommand()
            With comm
                .Connection = conn
                .CommandType = CommandType.Text
                .CommandText = statement
                .Parameters.AddWithValue("@bottlecount", bottlecount )
                .Parameters.AddWithValue("@roomhold" , roomhold)
            End With
            Try
                conn.Open()
                comm.ExecuteNonQuery()
            Catch (ex as SQlException)
                ' add message here '
            Finally
                conn.Close()
            End Try
        End Using
    End Using
End Sub
person John Woo    schedule 11.09.2012
comment
Я получил ошибку синтаксиса (отсутствует оператор) в выражении запроса '@bottlecountWHERE room_number = @roomhold'. Я использую ОлеДб - person Catherine Takishima; 11.09.2012
comment
@CatherineTakishima, не могли бы вы добавить здесь пробел @bottlecountWHERE? - person John Woo; 11.09.2012
comment
@CatherineTakishima, не забудьте принять ответ, чтобы избежать плохой репутации в сообществе :) - person John Woo; 11.09.2012

Вы не заказываете команды обновления.

Dim statement As String = "UPDATE tblPatientInfo SET bottle_used='" & bottlecount & "' WHERE room_number= '" & roomhold & "'"
person asawyer    schedule 11.09.2012
comment
Я использовал Order BY ID, потому что хочу получить последнюю вставленную строку в базе данных. Я не могу использовать Order By в заявлении об обновлении? - person Catherine Takishima; 11.09.2012
comment
@CatherineTakishima Вы никогда не указывали, какой тип базы данных вы используете, поэтому я не знаю, как дать вам точный ответ на этот вопрос, но в целом нет, вы не можете заказать обновление. Это не имеет никакого смысла, так как обновление не возвращает никаких строк. - person asawyer; 11.09.2012
comment
@CatherineTakishima Обновление создает запись через триггер или что-то в этом роде? - person asawyer; 11.09.2012
comment
да через последовательный порт данные получены - person Catherine Takishima; 11.09.2012
comment
@CatherineTakishima Похоже, здесь есть нужная вам информация: mikesdotnetting.com/Article/54/ также отличный совет Джона в его ответе, и вы должны его реализовать. - person asawyer; 11.09.2012