我試圖讓某個系統中的所有管理員。我有一個名爲isAdmin
的bit
列和一個名爲UserID
的列,它是一個主鍵。按位/布爾值選擇
我試圖通過該位選擇下列方式:
SELECT * FROM UsersTable WHERE UserID = 2 AND isAdmin = 1
不過,儘管與UserID
用戶等於2
是不是管理員,但它仍然充滿DataSet
它。我很難過,我也試過比較isAdmin
到'True'
沒有成功。
我該如何做到這一點?如何通過布爾(位)值進行過濾?
編輯:
另一次檢討,在我的代碼,我看見有幾個有趣的事情後。當我有了一個新的.aspx
和.aspx.cs
,並且在執行上面提到的同樣的查詢時,它完美地工作 - 它沒有返回一個東西(因爲它應該,因爲用戶num.2不是管理員),當我提到isAdmin = 0
,它確實返回它,應該。
但是,對於一些奇怪的原因 - 在另一個文件(實際的應用程序之一)中,完全相同的字符串被執行,但結果是完全不同的。我實際上從數據庫中取回2行。而更瘋狂的部分是,他們都包含相同的用戶(當前在數據庫中的單個管理員),所以我實際上以某種方式得到重複的行......?
這裏是我的代碼和一對夫婦的輸出我測試了它提到:
SqlConnection conn = new SqlConnection(/*My Connection String, identical in all files*/);
cmd.CommandText = "SELECT * FROM UsersTable WHERE UserID = " + Session["UserID"] + " AND isAdmin = 1"; //I put the output in an alert message box - OUTPUT: SELECT * FROM UsersTable WHERE UserID = 2 AND isAdmin = 1 (as expected). Note that this whole chunk is in a 'if(Session["UserID"] != null)'.
cmd.Connection = conn;
conn.Open();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(u);
conn.Close();
if (u.Tables[0].Rows.Count > 0) //u.Tables[0].Rows.Count == 2, how is that?
{
Response.Write("<script>alert('" + u.Tables[0].Rows[0]["Username"] + ", " + u.Tables[0].Rows[1]["Username"] + "');</script>"); //This, for instance, outputs - 'admin', 'admin' (note there's only one user with the username - 'admin' and he is an administrator.
/* Here I'm doing some things exclusively for the admin */
}
這是我的代碼塊,我的應用程序是不是多線程的,也沒有任何人在訪問u
,而我訪問它。這個問題真的讓我感到困惑,因爲我沒有看到它發生的理由。
注意:當我實際將cmd.CommandText
更改爲SELECT * FROM UsersTable WHERE isAdmin = 1
時,我得到3行(表中總共有3行),所有這些行都填充了admin
行的重複項。這裏會發生什麼?
EDIT2:已解決。實際上,DataSet
已經填滿了2行,因爲它是全球性的。我認爲是倒空然後填充,我想我錯了。感謝所有人。
驗證您的列定義和值是你所期望的是什麼。從UsersTable中選擇isAdmin,其中UserID = 2;如果它確實是一個布爾值,那麼0應該是false,1應該是true。 – TheMadDBA
你有什麼應該這樣做...所以當你這樣做select語句...它顯示isAdmin值= 0? –
@Damien_The_Unbeliever事實上,這就是問題所在,我只是想到了,因爲我使用的是全球的......非常感謝。 – Zim