Команда обновления VB с базой данных доступа

 Function UpdateTableRow()
        sqlLink.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\Users\will\Documents\Computing\ComputingProjectDatabase.accdb';"

    Try
        Dim sqlOrder As New OleDbCommand
        If sqlLink.State = ConnectionState.Closed Then
            sqlLink.Open()
        End If

        ' Creating the command and its parameter here before entering the loop to avoid a continue'
        ' create and destroy pattern for the OleDbCommand'

        sqlOrder.CommandText = "UPDATE StockSystem SET [Stock Price] =?, [Stock Size] =?, [Stock Quantity] =?, [Stock Category] =?, WHERE [Stock ID] =?"
        sqlOrder.Connection = sqlLink

        sqlOrder.Parameters.AddWithValue("@StockCategory", 0)
        sqlOrder.Parameters.AddWithValue("@StockQuantity", 0)
        sqlOrder.Parameters.AddWithValue("@StockSize", 0)
        sqlOrder.Parameters.AddWithValue("@StockPrice", 0)
        sqlOrder.Parameters.AddWithValue("@row", 0)

        Dim rows = DataGridView1.Rows

        For Each row In rows

            sqlOrder.Parameters("@row").Value = row.Cells(0).Value
            sqlOrder.Parameters("@StockPrice").Value = row.Cells(1).Value
            sqlOrder.Parameters("@StockSize").Value = row.Cells(2).Value
            sqlOrder.Parameters("@StockQuantity").Value = row.Cells(3).Value
            sqlOrder.Parameters("@StockCategory").Value = row.Cells(4).Value

            sqlOrder.ExecuteNonQuery()

        Next

        MsgBox("Data Updated.")

        'Problem with the update parameters, works for DELETE FUNCTION, needs to be changed to fit an UPDATE FUNCTION

    Catch ex As Exception
        MsgBox(ex.Message)
    Finally
        sqlLink.Close()

    End Try
    Return DataGridView1.SelectedRows
    DataGridView1.Refresh()
End Function

Эй, так как вы можете видеть, у меня есть хороший код здесь. Только это не работает на 100%. Я продолжаю рассказывать Syntax Error in UPDATE statement, Теперь я почти уверен, что оператор обновления корректен, так как без параметров, если у него нет проблем с кодом (правда, без параметров он вообще не работает). Я застрял на этом около недели, поэтому любая помощь будет отличной>.<

Вторая ошибка, которую я получаю, заключается в том, что, поскольку я использую Access, в нижней части таблицы есть "пустая" строка. Я думал, что что-то вроде (строка- 1) будет работать, только это VB 2010 не нравится вообще.

Как я уже сказал, любая помощь будет потрясающей.

2 ответа

Решение

Вы добавили , до WHERE, Это является причиной синтаксической ошибки в выражении UPDATE.

Попробуй это

sqlOrder.CommandText = "UPDATE StockSystem SET [Stock Price] =?, [Stock Size] =?, [Stock Quantity] =?, [Stock Category] =? WHERE [Stock ID] =?"

С другой стороны, я не уверен, что вы имеете в виду. Эта пустая строка?

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

ОБНОВЛЕНИЕ: Попытка исправить свой код. Я хотел бы сделать что-то вроде этого:

Try

    If sqlLink.State = ConnectionState.Closed Then
        sqlLink.Open()
    End If

    Dim rows = DataGridView1.Rows

    For Each row In rows

        Dim sqlOrder As New OleDbCommand("UPDATE StockSystem SET [Stock Price] =?, [Stock Size] =?, [Stock Quantity] =?, [Stock Category] =? WHERE [Stock ID] =?", sqlLink)            

        sqlOrder.Parameters.AddWithValue("@StockPrice", row.Cells(1).Value)
        sqlOrder.Parameters.AddWithValue("@StockSize", row.Cells(2).Value)
        sqlOrder.Parameters.AddWithValue("@StockQuantity", row.Cells(3).Value)
        sqlOrder.Parameters.AddWithValue("@StockCategory", row.Cells(4).Value)
        sqlOrder.Parameters.AddWithValue("@row", row.Cells(0).Value)

        sqlOrder.ExecuteNonQuery()

    Next

    MsgBox("Data Updated.")

Catch ex As Exception
    MsgBox(ex.Message)
Finally
    sqlLink.Close()
End Try

Попробуйте удалить запятую перед Where, измените это:

([Stock Category] =?, WHERE [Stock ID] =?)

К этому:

([Stock Category] =? WHERE [Stock ID] =?)

Другие вопросы по тегам