I have tried to emulate the How To Write a Parameterized Query but am getting syntax errors "near @MbrID" when executing them. I would appreciate instruction on how to properly do the query command text. Thanks for your help.
My relevant code follows:
Private Sub WeeklyAttendance()
Dim ServiceDate As String = dtpServiceDate.Value.Year.ToString + "-" + Format(dtpServiceDate.Value.Month, "00").ToString + "-" + Format(dtpServiceDate.Value.Day, "00").ToString
Dim BaseInsertString As String = "INSERT INTO Attendance (Year, DateOfService, Present, MbrID ) VALUES ("
Dim SuspectQuery As String = ""
Dim strInsertString As String = ""
Dim strUpdateDLACore As String = "UPDATE MbrData SET DateLastAttended = '" + ServiceDate + "' WHERE MbrID = @MbrID )"
Dim strUpdateDLA As String = ""
Dim intRecordsAffected As Integer = 0
Dim intUpdateDLARecordsAffected As Integer = 0
Dim cnnAttendance As SQLiteConnection = New SQLiteConnection(SqLiteConnection2)
cnnAttendance.Open()
Using cmdSetAttendance As SQLiteCommand = cnnAttendance.CreateCommand
cmdSetAttendance.CommandText = BaseInsertString & dtpServiceDate.Value.Year.ToString & ",'" & ServiceDate + "', @PresentValue, @MbrID )"
Dim PresentValueParameter As SQLiteParameter = New SQLiteParameter("@PresentValue")
Dim MbrIDParameter As SQLiteParameter = New SQLiteParameter("@MbrID")
cmdSetAttendance.Parameters.AddRange(New SQLiteParameter() {PresentValueParameter, MbrIDParameter})
Using cmdUpdateDLA As SQLiteCommand = cnnAttendance.CreateCommand
cmdUpdateDLA.CommandText = strUpdateDLACore
cmdUpdateDLA.Parameters.Add(MbrIDParameter)
Dim trans As SQLiteTransaction = cnnAttendance.BeginTransaction
Try
For I As Integer = 0 To tvFamilies2.Nodes.Count - 1
For J As Integer = 0 To tvFamilies2.Nodes(I).Nodes.Count - 1
MbrIDParameter.Value = tvFamilies2.Nodes(I).Nodes(J).Tag
SuspectQuery = "UpdateDLA"
If tvFamilies2.Nodes(I).Nodes(J).Checked Then
'strInsertString = BaseInsertString & dtpServiceDate.Value.Year.ToString & ",'" & ServiceDate + "',1," + tvFamilies2.Nodes(I).Nodes(J).Tag.ToString + ")" + vbCrLf
'strUpdateDLA = strUpdateDLACore + tvFamilies2.Nodes(I).Nodes(J).Tag.ToString
'Dim cmdUpdateDLA As SQLiteCommand = New SQLiteCommand(strUpdateDLA, cnnAttendance)
PresentValueParameter.Value = 1
intUpdateDLARecordsAffected += cmdUpdateDLA.ExecuteNonQuery()
'intUpdateDLARecordsAffected += MbrDataTableAdapter.UpdateDLA(dtpServiceDate.Value, MbrIDParameter.Value.ToString)
Else
'strInsertString = BaseInsertString & dtpServiceDate.Value.Year.ToString & ",'" & ServiceDate + "',0," + tvFamilies2.Nodes(I).Nodes(J).Tag.ToString + ")"
'Dim cmdUpdateDLA As SQLiteCommand = New SQLiteCommand(strUpdateDLA, cnnAttendance)
PresentValueParameter.Value = 0
intUpdateDLARecordsAffected += cmdUpdateDLA.ExecuteNonQuery()
End If
'Dim cmdSetAttendance As SQLiteCommand = New SQLiteCommand(strInsertString, cnnAttendance)
SuspectQuery = "SetAttendance"
intRecordsAffected += cmdSetAttendance.ExecuteNonQuery()
'intRecordsAffected += AttendanceTableAdapter.InsertQuery(CType(dtpServiceDate.Value.Year, Long), CType(ServiceDate, Date), PresentValueParameter.Value, CType(MbrIDParameter.Value, Long))
Next
Next
trans.Commit()
Catch ex As Exception
gMsg = "The " & SuspectQuery & " insert/update failed for the following reason: " & vbCrLf & ex.Message & vbCrLf
Select Case SuspectQuery
Case "UpdateDLA"
gMsg += cmdUpdateDLA.CommandText & vbCrLf & "PresentValueParameter = " & PresentValueParameter.Value.ToString & vbCrLf & " MbrID = " & MbrIDParameter.Value.ToString
Case "SetAttendance"
gMsg += cmdSetAttendance.CommandText & vbCrLf & " MbrID = " & MbrIDParameter.Value.ToString
End Select
MsgBox(gMsg)
Finally
If trans IsNot Nothing Then trans.Dispose()
End Try
End Using
End Using
cnnAttendance.Close()
cnnAttendance.Dispose()
MsgBox("Records Affected = " & intRecordsAffected.ToString + vbCrLf + "MbrData Records Affected = " + intUpdateDLARecordsAffected.ToString)
End Sub