如何将复选框列表中所有选定的项存储到数据库单列中



我的目标是将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注入攻击

最新更新