2011-07-04 62 views
0

我在我的登錄表單中使用以下代碼。但它並不關心案件。就像管理員或管理員或作爲用戶名的ADmin是否可以登錄到我的系統,當真正的是管理員。這是我的代碼:vb.net - 登錄問題

sql = "SELECT * FROM tblStaff WHERE Username = @User AND Password = @Pass" 
myCommand = New SqlCommand(sql, myConnection) 
myCommand.Parameters.AddWithValue("@User", txtUser.Text) 
myCommand.Parameters.AddWithValue("@Pass", txtPassword.Text) 
myCommand.ExecuteReader() 

..........

請幫助。

+0

問題是什麼?預期的行爲是什麼?什麼是實際行爲? – sehe

+0

在我的表單驗證中沒有區分大小寫。這意味着用戶可以輸入任何內容而不必關心區分大小寫,並且只要匹配該單詞就可以登錄。讓我們看看上面的代碼。 –

+0

問題是,你的提法並沒有說明你想要發生什麼。 '...意味着用戶可以...可以登錄':你是否想讓它區分大小寫? – sehe

回答

1

如果你想成爲的情況下不敏感那麼下面應該爲你工作:

sql = "SELECT * FROM tblStaff WHERE UPPER(Username) = UPPER(@User) AND Password = @Pass 

編輯:

如果您想要的用戶名對大小寫不敏感和密碼敏感然後下面應該爲你工作:

SELECT * FROM Users WHERE Username = @User AND (Password = @Pass COLLATE Latin1_General_CS_AS) 

如果你想在用戶名和密碼是區分大小寫然後嘗試以下方法:

SELECT * FROM Users WHERE (Username = @User COLLATE Latin1_General_CS_AS) AND (Password = @Pass COLLATE Latin1_General_CS_AS) 
+0

沒有人,我想區分大小寫,這就是爲什麼我的問題是 –

+0

好,假設我有一個用戶名'管理員'和密碼'myP @ ssw0rd'在我的數據庫。當我使用窗口形式登錄到我的系統時,我使用不同的用戶名和密碼來創建窗口,就像'AdMin'和'MYP @ assw0rd'一樣,它不會產生任何錯誤。它仍然使我登錄系統。 –

+0

我試過了,但它仍然不起作用 –

2

通常應該:

a)在個案比較用戶名* *對時尚敏感 - 你應該只使用用戶名admin一個用戶,但它的拼寫。只有大小寫不同的用戶名可能會導致其他用戶混淆,試圖找出真正的管理員是誰。

b)存儲散列(優選地散列散列)在二進制列中的密碼。

話雖這麼說,如果你想強制區分大小寫的比較發生,你可以嘗試使用COLLATE clause

SELECT * FROM tblStaff WHERE Username = @User AND Password = @Pass COLLATE Latin1_General_CS_AS 

以上僅適用COLLATE子句的密碼比較(在這種情況下, ,我們強制大小寫敏感(CS)和強調敏感(AS)) - 您需要將其複製到用戶名列(不推薦,參見上面的(a))。

+0

我仍然遇到這個問題。你可以給我一個完整的嗎? –

+1

@Damien:我懷疑OP真的希望在敏感的情況下進行比較。我認爲語言障礙有點寬此 – sehe