Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MS Access中更新记录不能使用SQL语法_Sql_Vb.net_Ms Access - Fatal编程技术网

在MS Access中更新记录不能使用SQL语法

在MS Access中更新记录不能使用SQL语法,sql,vb.net,ms-access,Sql,Vb.net,Ms Access,你能帮我做这个吗。 我有这些密码 Private Sub dgvInTraining_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvInTraining.CellClick If e.ColumnIndex = 0 Then Dim transID As Integer = Me.dgvInTraining.Rows(e.RowInde

你能帮我做这个吗。 我有这些密码

Private Sub dgvInTraining_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvInTraining.CellClick
    If e.ColumnIndex = 0 Then
        Dim transID As Integer = Me.dgvInTraining.Rows(e.RowIndex).Cells(1).Value

            UPdateInTraining(transID, Now)
        Else
            Exit Sub
        End If
    End If
End Sub

Public Sub UPdateInTraining(transID, timeOut)
    Try
        cnn.Open()
        query = "UPDATE InTraining SET TimeOut = @timeOut WHERE TransID = @transID"
        cmd = New OleDbCommand(query, cnn)
        cmd.Parameters.AddWithValue("@transID", transID)
        cmd.Parameters.AddWithValue("@timeOut", timeOut)
        cmd.ExecuteNonQuery()
    Catch ex As Exception
        GetErrorMessage(ex)
    Finally
        CloseConnection()
    End Try
End Sub
你能告诉我我做错了什么吗。我可以很好地保存,但是当我尝试更新我创建的记录时,它不会更改数据库中的值。我的数据库定义如下:

TransID AutoNumber
ID Text
TimeIn Date/Time
TimeOut Date/Time
WithWater Yes/No
TransDate Date/TIme

OleDB
只是将参数用作占位符(名称无关紧要/被忽略),因此您必须注意按照与SQL中显示的相同的顺序添加它们。SQL使用顺序
@timeOut
然后
@transID

"UPDATE InTraining SET TimeOut = @timeOut WHERE TransID = @transID"
但您将按相反的顺序添加它们:

cmd.Parameters.AddWithValue("@transID", transID)
cmd.Parameters.AddWithValue("@timeOut", timeOut)
它将查找超时值的TransID。交换这些线路,它应该可以解决任何其他问题


请注意,建议使用
“?”
作为占位符1。这样做将迫使您回过头来查看SQL,看看下一步要添加哪个。但是使用
无法修复按错误顺序添加它们的问题

特别是当有几个参数时,我更喜欢使用“
@p1,@p2…
”样式的参数。数字有助于为SQL中的列名编制索引,您可以直观地看到它们是按正确的顺序添加的:

cmd.Parameters.AddWithValue("@p1", strBar)
cmd.Parameters.AddWithValue("@p2", nFoo)

一,。事实上,他们说必须使用
。这不是真的,它只是不将值映射到名称,而是依赖于添加的顺序。

OleDB不使用命名参数,而将其用作PlaceHiolder。交换
AddWithValue
行的顺序,这样您就可以按照它们在SQLI中出现的相同顺序添加值了,先生。你什么意思?我明白了!!!!谢谢你!我建议在使用OleDb时使用问号
作为占位符,如上所述。这可以防止其他修改您代码的开发人员(包括几年后的您)犯同样的错误。