我有这段代码用于将记录插入Access表。
LastUpdated
字段在数据库级别定义为Date/Time
。插入时出现错误
Data type mismatch in criteria expression
我正在使用参数化查询来避免格式化值的问题而且非常奇怪,因为我有相同的代码(有更多参数)在另一个表上插入记录,其中LastUpdated
以相同的方式定义它工作正常。
有什么想法吗?
SqlQuery = "INSERT INTO History (ActivityID, LastUpdated) VALUES (@p1,@p2)"
With sqlcommand
.CommandText = SqlQuery
.Connection = SQLConnection
.Parameters.AddWithValue("@p1", IDAct)
.Parameters.AddWithValue("@p2", DateTime.Today)
End With
result = sqlcommand.ExecuteNonQuery()
If (result = 1) Then
LabelWarning.Text = "Activity filled"
LabelWarning.BackColor = Color.ForestGreen
LabelWarning.Visible = True
ButtonSave.Visible = False
ButtonBack.Visible = False
ButtonOK.Visible = True
BlockControls()
End If
答案 0 :(得分:1)
可能问题与参数占位符有关。
此MSDN文档声明OleDbCommand不支持命名参数(仅限位置),正确的占位符应为“?”而不是“@ p1”。
https://msdn.microsoft.com/en-us/library/yy6y35y8%28v=vs.110%29.aspx
修改强>
结论是,占位符不必严格遵守doc语法。只有订单必须绝对保留。
明确地声明参数类型似乎可以解决问题:
.Parameters.Add("@p2", OleDbType.DBTimeStamp)
.Parameters("@p2").Value = DateTime.Today