2016-05-12 7 views
0

私は、会社の従業員がプログラムのクロックイン/アウトをする場合に「提示」するように設定しようとしています。データベースには同じ名前のフィールドがあり、誰かが存在するかどうかを格納するブール値を使用します。私は自分のSQLステートメントが正しいと信じています。私が続けている問題は、「追加情報:1つまたは複数の必須パラメータに値が指定されていません」ここでSQLパラメータに関する問題

は、私はUPDATEクエリを実行するために使用していたコードです:

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

Null、0または1のみであるため、SQLデータ型 'ビット'を使用してブール値を表すことができます。(0 = False、1 = True) –

+0

[Present] = False ? –

+0

これはどちらも機能しませんでした。選択された従業員に対してPresentをtrue/falseに設定するときにだけでなく、すべてのメンバーを選択しているときにプログラムが正常に機能するので、リンクされているデータベースも問題ありません。 –

関連する問題