1

我目前正在运行一个 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 代码中创建选择命令解决了这个问题。它消除了对参数的需求,因此我可以将变量直接传递到查询字符串中。

我用过:受保护的 Sub SqlDS_ReportCategories_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles SqlDS_ReportCategories.Init

获取我的数据源的句柄,然后: Dim s As SqlDataSource = CType(sender, SqlDataSource) 创建它的对象引用。

然后 s.SelectCommand =“一些查询”+ 变量 +“其余查询”

希望这对未来的人们有所帮助!

4

2 回答 2

1

解决了:

好的。我通过在我的实际 VB 代码中创建选择命令解决了这个问题。它消除了对参数的需求,因此我可以将变量直接传递到查询字符串中。

我用过:受保护的 Sub SqlDS_ReportCategories_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles SqlDS_ReportCategories.Init

获取我的数据源的句柄,然后: Dim s As SqlDataSource = CType(sender, SqlDataSource) 创建它的对象引用。

然后 s.SelectCommand =“一些查询”+ 变量 +“其余查询”

希望这对未来的人们有所帮助!

于 2012-08-10T21:58:13.937 回答
0

您可以使用 SQLIN同时搜索多个项目。

首先要做的是将安全级别收集到一个逗号分隔的列表中:

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() & ")"
于 2012-08-09T15:47:10.150 回答