我目前正在运行一个VB.net/ASPX Web应用程序,该应用程序根据用户安全组级别从数据库中获取特定记录。我想要做的是,如果用户来自多个安全组 - 为他们所在的每个安全组获取报告。
在where子句中,此行存在:
and b.security_level_id = @security_level_id
这只允许将一个security_level_id
传递给选择查询。
是否可以多次运行查询,更改参数:
<asp:Parameter DefaultValue="0" Name="security_level_id" />
或者我可以从这个参数中创建一个数组并在一个查询中循环它吗?
谢谢!
解决:
确定。我通过在我的实际VB代码中创建select命令解决了这个问题。它删除了对参数的需要,因此我可以将变量直接传递给查询字符串。
我用过: 受保护的Sub SqlDS_ReportCategories_Init(ByVal sender As Object,ByVal e As System.EventArgs)处理SqlDS_ReportCategories.Init
获取我的数据源的句柄,然后是: Dim s As SqlDataSource = CType(sender,SqlDataSource) 创建它的对象引用。
然后 s.SelectCommand =&#34;一些查询&#34; +变量+&#34;其余查询&#34;
希望这有助于将来的人们!
答案 0 :(得分:1)
解决:
确定。我通过在我的实际VB代码中创建select命令解决了这个问题。它删除了对参数的需求,因此我可以将变量直接传递给查询字符串。
我使用过:受保护的Sub SqlDS_ReportCategories_Init(ByVal sender As Object,ByVal e As System.EventArgs)处理SqlDS_ReportCategories.Init
获取我的数据源的句柄,然后是:Dim s As SqlDataSource = CType(sender,SqlDataSource)创建它的对象引用。
然后s.SelectCommand =“some query”+ Variable +“rest of query”
希望这有助于将来的人们!
答案 1 :(得分:0)
您可以使用SQL IN
同时搜索多个项目。
首先要做的是将安全级别收集到以逗号分隔的列表中:
Dim sbSQL As New System.Text.StringBuilder(500)
For Each wSecurityLevel As Integer In theUser.SecurityLevels
If sbSQL.Length <> 0 Then
sbSQL.Append(",")
End If
sbSQL.Append(wSecurityLevel)
Next
然后设置您的SQL语句以使用IN:
"and b.security_level_id IN (" & sbSQL.ToString() & ")"