[英]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 級別聲明cmd
和cn
。 這是不好的,因為這兩個對象都需要在使用后進行處理。 您需要在使用它們的方法中創建和處置。 將連接字符串作為 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.