我有一个允许选择多个值的列表框。
这是我对gridview的查询
saocmd.CommandText = "SELECT B603SalesAsOFMASTER.SDESCR, B603SalesAsOFMASTER.DYYYY, B603SalesAsOFMASTER.AsOFSales, B603SalesAsOFMASTER.ASOFPAX, B603SalesAsOFMASTER.YESales, B603SalesAsOFMASTER.YEPAX, B603SalesAsOFMASTER.PCTofSales, B601SalesAsOF.Sales AS CurrentSales, B601SalesAsOF.PAX AS CurrentPAX FROM B603SalesAsOFMASTER INNER JOIN B601SalesAsOF ON B603SalesAsOFMASTER.SDESCR = B601SalesAsOF.SDESCR WHERE (B603SalesAsOFMASTER.DYYYY =@Dyyyy) AND (B601SalesAsOF.DYYYY = (year( getdate() ))) and B603SalesAsOFMASTER.SDESCR in (@regions)order by B603SalesAsOFMASTER.SDESCR"
这是我对列表框的查询
listcmd.CommandText = "SELECT distinct B603SalesAsOFMASTER.SDESCR FROM B603SalesAsOFMASTER"
我希望用户在gridview中选择他们想要查询的所有区域。
截至目前,我将每个选定的列表项放入文本框
Function list()
Dim li As ListItem
For Each li In ListBox1.Items
If li.Selected Then
TextBox1.Text &= "'" & li.Text & "' ," & vbCrLf
End If
Next
End Function
然后在运行查询之前我使用 减去最后一个,所以我没有得到一个错误,我必须在我的查询中使用textbox1.text而不是参数。这是更慢和SQL注入,我需要帮助这样做更好的方式谢谢
If TextBox1.Text.EndsWith(",") Then
TextBox1.Text = TextBox1.Text.Substring(0, TextBox1.Text.Length - 1)
End If
答案 0 :(得分:1)
您不能将逗号分隔列表用作select-command的参数。您必须编写一个表值函数来迭代数据库中的参数(MS-SQL-Server?):Comma-separated List of Values
CREATE FUNCTION iter$simple_intlist_to_tbl (@list nvarchar(MAX))
RETURNS @tbl TABLE (number int NOT NULL) AS
BEGIN
DECLARE @pos int,
@nextpos int,
@valuelen int
SELECT @pos = 0, @nextpos = 1
WHILE @nextpos > 0
BEGIN
SELECT @nextpos = charindex(',', @list, @pos + 1)
SELECT @valuelen = CASE WHEN @nextpos > 0
THEN @nextpos
ELSE len(@list) + 1
END - @pos - 1
INSERT @tbl (number)
VALUES (convert(int, substring(@list, @pos + 1, @valuelen)))
SELECT @pos = @nextpos
END
RETURN
END