SQLDataSource:使用更改参数(或数组参数?)多次运行select命令

时间:2012-08-09 15:02:26

标签: asp.net sql vb.net

我目前正在运行一个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;

希望这有助于将来的人们!

2 个答案:

答案 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() & ")"