【发布时间】:2023-04-10 04:12:01
【问题描述】:
我有一个允许选择多个值的列表框。
这是我对 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
然后在运行查询之前我使用 减去 final ,所以我没有收到错误,我必须在我的查询中使用 textbox1.text 而不是参数。这是较慢和 sql 注入,我需要帮助以更好的方式这样做谢谢
If TextBox1.Text.EndsWith(",") Then
TextBox1.Text = TextBox1.Text.Substring(0, TextBox1.Text.Length - 1)
End If
【问题讨论】:
-
您不能使用逗号分隔列表作为选择命令的参数。您必须编写一个表值函数来迭代数据库中的参数(MS-SQL-Server?):sommarskog.se/arrays-in-sql-2005.html#CSV
-
所以存储过程是不可避免的,哈哈我没用过
-
如果你不想要 sql 注入,是的。另外我建议不要使用区域文本,而是使用区域的 ID 作为选择命令。选择主键比选择 varchar 列更快。
标签: asp.net sql vb.net parameters sql-injection