簡體   English   中英

查詢表達式 '[void]'=' 中缺少語法錯誤運算符

[英]Syntax error missing operator in query expression '[void]'='

請幫幫我-我正在從事一個項目,我想直接從 datagridview 更新數據,但是當我嘗試以下代碼時,出現錯誤

查詢表達式 '[void]'=' 中缺少語法錯誤運算符

並且更新不起作用:

 For i As Integer = 0 To jamadata.Rows.Count - 1 Step +1
        query = "update rojmel set [jrs]='" & jamadata.Rows(i).Cells(0).Value & "',[note]='" & jamadata.Rows(i).Cells(2).Value & "' Where [void]= " & jamadata.Rows(i).Cells(3).Value & ""

    Next
    If (mydb.Exacutemyoledb(query)) Then
        MsgBox(" data updated")
    End If

我正在使用這個 class 進行更新查詢

在此處輸入圖像描述

代碼:

 Shared Function Exacutemyoledb(ByVal sql As String) As Boolean
    Try
        cmd = New OleDbCommand(sql, cn)
        cn.Open()
        cmd.ExecuteNonQuery()
        cn.Close()
        Return True

    Catch ex As Exception
        cn.Close()
        MsgBox(ex.Message)

        Return False

    End Try

End Function

這是我的數據類型

我很高興看到您將 UI 代碼與數據訪問代碼分開,但您不希望 UI 代碼中包含 sql 語句和參數。

我假設jamadata是一個可能綁定到 DataGridView 的DataTable ID 會在第 3 列中,這很奇怪,但這取決於您原來的 select。 我們只需要將數據發送到mydb class function。 List(Of T)很方便,因為我們不需要知道大小。 我們只是遍歷所有行並添加我們需要的參數值。

如果您打算做的只是在出現錯誤時顯示消息,那么讓錯誤冒泡到用戶界面代碼並在那里顯示您的消息。

Private Sub OPCode()
    Dim lstJRS As New List(Of Integer)
    Dim lstNote As New List(Of String)
    Dim lstID As New List(Of Integer)

    For Each row As DataRow In jamadata.Rows
        lstJRS.Add(CInt(row(0)))
        lstNote.Add(row(2).ToString)
        lstID.Add(CInt(row(3)))
    Next
    Try
        If (mydb.Exacutemyoledb(lstJRS, lstNote, lstID)) Then
            MsgBox(" data updated")
        End If
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

現在到 class 代碼。 看起來您已經在 class 級別聲明cmdcn 這是不好的,因為這兩個對象都需要在使用后進行處理。 您需要在使用它們的方法中創建和處置。 將連接字符串作為 class 級別變量可能很方便。

Using...End Using blocks 確保對象被關閉和處理,即使它有一個錯誤。 連接和命令都包含在塊中。 注意 Using 第一行末尾的逗號。

我們在循環外將參數添加到參數集合中。 只有參數的值在循環中改變。 Access 會忽略參數的名稱; 我們只是為了可讀性而使用它們。 它們在 sql 字符串中出現的順序必須與它們添加到參數集合的順序相匹配。

Private Shared ConStr As String = "Your connection string"
Shared Function Exacutemyoledb(JRS As List(Of Integer), Notes As List(Of String), IDs As List(Of Integer)) As Boolean
    Using cn As New OleDbConnection(ConStr),
            cmd As New OleDbCommand("Update rojmel Set jrs = @JRS, note = @Note Where ID = @ID;", cn)
        cmd.Parameters.Add("@JRS", OleDbType.Integer)
        cmd.Parameters.Add("@Note", OleDbType.VarChar)
        cmd.Parameters.Add("@ID", OleDbType.Integer)
        cn.Open()
        For i = 0 To JRS.Count - 1
            cmd.Parameters("@JRS").Value = JRS(i)
            cmd.Parameters("@Note").Value = Notes(i)
            cmd.Parameters("@ID").Value = IDs(i)
            cmd.ExecuteNonQuery()
        Next
    End Using
    Return True
End Function

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM