我的目标是将checkbooxlist中的所有选中项输入到数据库中的单个列中。我知道这不是一个好的设计。然而,这是必需的。
下面是我用来从复选框列表中获取所有选中项目的代码:
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()
然而,当我执行这段代码时,它崩溃了,出现了一个错误。错误如下:
's'附近语法错误。字符串')'后的未闭引号。
出现这个错误是因为' listetems '。
问题不在于如何构建列表,而在于如何将值传递给数据库。
不要使用字符串连接来构建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注入攻击