2012-08-09 47 views
1

我正在運行一個VB.net/ASPX Web應用程序,該應用程序根據用戶安全組級別抓取數據庫中的特定記錄。如果用戶是從多個安全組我想要做的是 - 搶報告,供他們存在於每個安全組SQLDataSource:通過更改參數(或數組參數?)多次運行select命令

在where子句中,這條線存在: and b.security_level_id = @security_level_id

這僅允許一個。 security_level_id被傳入選擇查詢。

是否可以查詢多次運行,改變參數:

<asp:Parameter DefaultValue="0" Name="security_level_id" />

或者我可以在一個單一的查詢作出數組超出此參數並遍歷呢?

謝謝!

求助:

好的。我通過在我的實際VB代碼中創建select命令解決了這個問題。它刪除了對參數的需要,所以我可以直接將變量傳遞給查詢字符串。

我使用: 保護小組SqlDS_ReportCategories_Init(BYVAL發件人爲對象,BYVALË作爲System.EventArgs)把手SqlDS_ReportCategories.Init

讓我的數據源的手柄,依次爲: 昏暗譯文]的SqlDataSource = CType(發件人,SqlDataSource) 創建它的對象引用。

希望

然後 s.SelectCommand =「一些查詢」 +變量+「查詢休息」這有助於人們在未來!

+0

你用什麼來做你的查詢? – 2012-08-09 15:30:47

+0

我對 mHo2 2012-08-09 19:07:07

回答

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() & ")" 
+0

我已經算出了大部分內容,但是現在數據庫正在抱怨 「將nvarchar值'3,5,5,99'轉換爲一列數據類型int「。所以我不確定接下來要做什麼。 – mHo2 2012-08-09 18:57:40

+0

確保你不用引號括住值的列表:如果你這樣做,SQL會把它看作一個長字符串而不是單個值。 – 2012-08-09 19:13:20

+1

強制鏈接到Erland Sommarskog的頁面:http://www.sommarskog.se/arrays-in-sql.html – 2012-08-10 08:31:37

1

解決:

好。我通過在我的實際VB代碼中創建select命令解決了這個問題。它刪除了對參數的需要,所以我可以直接將變量傳遞給查詢字符串。

我使用:保護小組SqlDS_ReportCategories_Init(BYVAL發件人爲對象,BYVALË作爲System.EventArgs)把手SqlDS_ReportCategories.Init

讓我的數據源的手柄,依次爲:昏暗譯文]的SqlDataSource = CTYPE(發件人,SqlDataSource)創建它的對象引用。

希望

然後s.SelectCommand =「一些查詢」 +變量+「查詢休息」這有助於人們在未來!