2011-07-04 13 views
0

ログインフォームに次のコードを使用します。ケースについては気にしません。管理者や管理者のように、あるいは実際の管理者が私のシステムにログインすることもできますか?これらは私のコードです: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 

EDIT:

ユーザー名は大文字小文字を区別しないとパスワードになりたい場合は大文字と小文字の場合sensitiveあなたのためには次のようにしてください:

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

だった理由です。私はユーザー名 'admin'とパスワード '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