2016-05-12 49 views
0

我正在尝试为公司员工设置“出席”,如果他们在程序中输入/输出。数据库有一个名称相同的字段,并使用布尔值来存储某人是否存在。我相信我的SQL语句是正确的。我继续得到的问题是:“其他信息:没有给出一个或多个必需参数的值。”SQL参数问题

这里是我使用执行更新查询代码:

Private Sub btnClockout_Click(sender As Object, e As EventArgs) Handles btnClockout.Click 
    'SelectedEmployee = lstClockin.FocusedItem.Text 
    'lblClockinStatusColor.BackColor = Color.Red 
    'btnClockout.Enabled = False 
    'btnClockin.Enabled = True 
    'lblClockinStatus.Text = "Employee is: Clocked Out" 
    'If txtInfoEmployeeID.Text = "" Then 
    ' MsgBox("You need to select a employee to clock-out.", MsgBoxStyle.Exclamation) 
    'End If 

    con.ConnectionString = provider & datafile 
    con.Open() 
    sqlstatement = ("UPDATE [EmployeeAccounts] SET [Present] = False WHERE [EmployeeID] = '" & SelectedEmployee & "'") 
    da = New OleDb.OleDbDataAdapter(sqlstatement, con) 
    da.Fill(ds, "ClockOutButton") 
    con.Close() 

End Sub 
+1

我不是VB专家,所以我不会尝试一个答案。但是你应该认识到你当前的查询很容易发生SQL注入。相反,你应该使用参数化查询。 –

+0

@TimBiegeleisen +1,请尝试查看[此问题](http://stackoverflow.com/questions/20845283/vb-net-sql-parameters-update?rq=1)参数化查询。 –

+0

另外,你确定你应该使用新的OldDbDataAdapter进行更新吗? –

回答

0

我不认为有任何布尔类型的SQL数据库。你可以使用下面的代码。

Private Sub btnClockout_Click(sender As Object, e As EventArgs) Handles btnClockout.Click 
    SelectedEmployee = lstClockin.FocusedItem.Text 
    'lblClockinStatusColor.BackColor = Color.Red 
    'btnClockout.Enabled = False 
    'btnClockin.Enabled = True 
    'lblClockinStatus.Text = "Employee is: Clocked Out" 
    'If txtInfoEmployeeID.Text = "" Then 
    ' MsgBox("You need to select a employee to clock-out.", MsgBoxStyle.Exclamation) 
    'End If 

    con.ConnectionString = provider & datafile 
    con.Open() 
    sqlstatement = ("UPDATE [EmployeeAccounts] SET [Present] = 'False' WHERE [EmployeeID] = '" & SelectedEmployee & "'") 
    da = New OleDb.OleDbDataAdapter(sqlstatement, con) 
    da.Fill(ds, "ClockOutButton") 
    con.Close() 

End Sub 
+0

您可以使用SQL数据类型'bit'来表示一个布尔值,因为它只能是Null,0或1.(0 = False,1 = True) –

+0

我们可以在update语句中使用set [Present] = False ? –

+0

这也不起作用,它连接的数据库也没有问题,因为程序在选择所有成员时工作正常,只是在为选定员工设置Present为true/false时没有问题。 –