2011-11-18 107 views
0

我需要檢查用戶是否有權根據他們的角色進行訪問。 (ASP.NET和SQL Server)如何從查詢返回布爾值

SELECT rf.ReadAccess 
FROM aspnet_Users as u INNER JOIN aspnet_Roles as r ON r.UserID=u.UserID 
INNER JOIN RolesByForm as rf ON rf.RoleID=r.RoleID 
WHERE [email protected] 

所以這讓我接近,但這是我真正想要的。我希望表單默認可見,所以如果RolesByForm中沒有記錄,它應該是「真」。但是如果有記錄,它應該根據ReadAccess字段返回。

如何獲取查詢以返回布爾值?

+0

這對發佈使用這個查詢的ASP.NET代碼也是有幫助的。 – jlarson

+0

如果沒有記錄,則沒有記錄。您不應該依賴SQL查詢來默認顯示您的表單,而是使用代碼。 – Otiel

+0

TSQL中沒有布爾值。但是,您可以返回0或1的BIT,您可以使用三元函數在您的應用程序中投射。 – SQLMason

回答

0
SELECT ReadAccess=CASE rf.ReadAccess WHEN 1 THEN 'True' ELSE 'False' END 
FROM aspnet_Users as u INNER JOIN aspnet_Roles as r ON r.UserID=u.UserID 
INNER JOIN RolesByForm as rf ON rf.RoleID=r.RoleID 
WHERE [email protected] 

而在你的.NET代碼寫例如:

bool result; 
bool myBoolean=Boolean.TryParse(dataset["ReadAccess"], out result); 
0

在.NET SQL服務器領域BIT是真的還是假的,所以:

CAST (rf.ReadAccess as BIT) 

或者,如果ReadAccess是一個varchar:

CASE ReadAccess 
    WHEN 'Something' THEN CAST(1 as bit) 
    ELSE CAST (0 as bit) 
END 
1

嘗試

SELECT case count(rf.ReadAccess) when 0 then 'True' else 'False' end ReadAccess 
FROM aspnet_Users as u INNER JOIN aspnet_Roles as r ON r.UserID=u.UserID 
INNER JOIN RolesByForm as rf ON rf.RoleID=r.RoleID 
WHERE [email protected] 
0

假設rf.ReadAccess是位字段(1或0),那麼要一個外部聯接到捕獲rolesbyform記錄的非存在性。

也許這樣的事情?

SELECT distinct isnull(rf.ReadAccess, 1) as ReadAccess 
FROM aspnet_Users as u INNER JOIN aspnet_Roles as r ON r.UserID=u.UserID 
LEFT OUTER JOIN RolesByForm as rf ON rf.RoleID=r.RoleID 
WHERE [email protected] 
0

您可以返回0(false)和1(true)。試試這個例子:

CREATE PROCEDURE CheckReadAccess 
@UserID INT 
AS 

BEGIN 
DECLARE @rdAxs VARCHAR(255) 

    SELECT @rdAxs = rf.ReadAccess 
    FROM aspnet_Users as u INNER JOIN aspnet_Roles as r ON r.UserID=u.UserID 
    INNER JOIN RolesByForm as rf ON rf.RoleID=r.RoleID 
    WHERE [email protected] 

    IF @rdAxs IS NULL 
     RETURN 0 
    ELSE 
     RETURN 1 

END