我的目标是将checkbooxlist中的所有已检查项目输入到我的数据库中的单个列中。 我知道这不是一个好的设计。但是,这是要求。
以下是我用来从checkboxlist中获取所有选定项目的代码:
Dim listitems As String
listitems = ControlChars.CrLf
For i = 0 To (chkActivities.Items.Count - 1)
If chkActivities.GetItemChecked(i) = True Then
listitems = listitems & (i + 1).ToString & chkActivities.Items(i).ToString & ControlChars.CrLf
End If
Next
这是为填充我的表而执行的连接字符串和命令:
>
objCon.Open()
objCmd = New SqlCommand("insert into activity_by_customer (userID, city, personal_activities, BookingDate, price) values ( '" & frmLogin.userID & "','" & cbbCity.Text & "','" & listitems & "','" & Date.Today & "','" & lblpriceValue.Text & "' )", objCon)
objCmd.ExecuteNonQuery()
activitiesbycustomer.Update(Me.ResourcesDataSet.activity_by_customer)
MsgBox("Your booking has been successful")
objCon.Close()
然而,当我执行此代码时,它会因错误而崩溃。错误如下:
'附近的语法不正确。 字符串后的未闭合引号' )'
由于' listitems'出现此错误。 任何帮助将不胜感激。
答案 0 :(得分:0)
如何构建列表项,而不是如何将值传递给数据库。
不要使用字符串连接来构建sql命令
objCon.Open()
objCmd = New SqlCommand("insert into activity_by_customer " & _
"(userID, city, personal_activities, BookingDate, price) " & _
"values (@usrID, @city, @itms, @dt, @price)", objCon)
objCmd.Parameters.AddWithValue("@usrID",frmLogin.userID)
objCmd.Parameters.AddWithValue("@city",cbbCity.Text)
objCmd.Parameters.AddWithValue("@itms", listitems)
objCmd.Parameters.AddWithValue("@dt",Date.Today)
objCmd.Parameters.AddWithValue("@price", lblpriceValue.Text)
objCmd.ExecuteNonQuery()
....
通过这种方式,框架代码会根据单个引号等字符的存在来格式化您的值,并避免随之而来的语法错误。此外,通过这种方式,您可以避免Sql Injection attacks