VB.NET:在Ms Access中更新记录
我正在创建一个员工计时表,他们必须通过按timein和timeout按钮插入计时。对于timein,我在数据库中为那个人创建一个新记录;对于timeout,我使用update命令更新那个现有记录。这是我的密码:VB.NET:在Ms Access中更新记录,vb.net,ms-access-2007,insert-update,Vb.net,Ms Access 2007,Insert Update,我正在创建一个员工计时表,他们必须通过按timein和timeout按钮插入计时。对于timein,我在数据库中为那个人创建一个新记录;对于timeout,我使用update命令更新那个现有记录。这是我的密码: Dim cb As New OleDb.OleDbCommandBuilder(ssda) cb.QuotePrefix = "[" cb.QuoteSuffix = "]" con.ConnectionString = dbProvider & dbS
Dim cb As New OleDb.OleDbCommandBuilder(ssda)
cb.QuotePrefix = "["
cb.QuoteSuffix = "]"
con.ConnectionString = dbProvider & dbSource
con.Open()
Dim str As String
str = "UPDATE emp_timing SET emp_timing.emp_timeout = '" & OnlyTime & "' WHERE (((emp_timing.emp_code)='" & TextBox1.Text & "') AND ((emp_timing.day)=" & Now.ToString("MM/dd/yyyy") & "))"
Dim cmd As OleDbCommand = New OleDbCommand(str, con)
Try
cmd.ExecuteNonQuery()
cmd.Dispose()
con.Close()
MsgBox("Data added")
TextBox1.Clear()
TextBox2.Clear()
TextBox1.Focus()
ComboBox1.SelectedIndex = -1
Catch ex As Exception
MsgBox(ex.Message)
End Try
我的代码工作正常,但问题是它没有更新数据库中的记录
Access中字段的数据类型:
emp_code=Number,emp_timeout=Text,day=Date/Time。与往常一样,这是由于代码未使用参数集合将值传递给数据库引擎造成的。直到遇到转换问题,这才真正理解,因为日期总是发生这种情况
str = "UPDATE emp_timing SET emp_timeout = @p1 " & _
"WHERE emp_code = @p2 AND day = @p3"
Using con = new OleDbConnection( dbProvider & dbSource)
Using cmd = New OleDbCommand(str, con)
con.Open()
cmd.Parameters.Add("@p1", OleDbType.VarWChar).Value = OnlyTime
cmd.Parameters.Add("@p2", OleDbType.Integer).Value = Convert.ToInt32(TextBox1.Text)
cmd.Parameters.Add("@p3", OleDbType.Date).Value = new DateTime(Now.Year, Now.Month, Now.Day)
Try
Dim rowsAdded = cmd.ExecuteNonQuery()
if rowsAdded > 0 Then
MsgBox("Data added")
TextBox1.Clear()
TextBox2.Clear()
TextBox1.Focus()
ComboBox1.SelectedIndex = -1
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Using
End Using
发生这种情况的原因是您不使用参数,而是连接字符串,将其转换为您所在的语言环境。我应该如何解决此问题@您的字段emp_timeout和datetime类型的day是什么?emp timeout是Text,day是datetime,只有当emp_代码与TextBox1中输入的文本精确匹配时才会更新(您不应该将此值直接传递到数据库中,您可能应该首先验证它,并确保不会发生SQL注入。此外,您的emp_timing.day在字符串上匹配,但它没有包含在单引号中。它看起来像一个日期,但您没有在此处进行任何显式转换。因此,我怀疑这会更新。)0条记录,基于目前为止的代码。当我按下按钮时,它没有响应。