0

我的目标是将复选框列表中的所有选中项目输入到我数据库中的单个列中。我知道这不是一个好的设计。但是,这是要求。

这是我用来从复选框列表中获取所有选定项目的代码:

 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' 附近的语法不正确。字符串 ' )' 后面的非闭合引号。

由于“列表项”,此错误恰好出现。任何帮助,将不胜感激。

4

1 回答 1

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 攻击

于 2013-05-06T21:50:48.457 回答