2012-03-10 30 views
0

私はSQLとWebMatrix Razorの構文を使用して、ユーザと呼ばれるテーブル内にユーザ名が含まれているかどうかを調べています。行が存在するかどうかを判断する最良の方法

私が持っているしたいロジックは次のとおりです。

bool usernameExists = db.QueryValue("SELECT Username from Users where Username = ?", username); 
if(usernameExists.IsEmpty()){ //username is not in table 
    Response.Redirect("Register.cshtml"); 
} 

はこれについて行くためのベストプラクティスは何ですか?

答えて

1

最も簡単なのは、おそらくです:

bool usernameExists = db.QueryValue("SELECT usernameExists = CASE WHEN EXISTS 
(SELECT 1 FROM Users WHERE Username = ?) THEN 1 ELSE 0 END", username); 

if (!usernameExists) { Response.Redirect("Register.cshtml"); } 

私はSQL Serverの側から厳密に言うんだけど。これがC#側からの最良のアプローチであるかどうかはわかりません。

+0

ありがとう、これは私が探しているものです。このSQLクエリを実行しようとすると、「クエリを解析する際にエラーが発生しました(トークン行番号= 1、トークン行オフセット= 23、トークン=エラー」)。これが起こっている理由が考えられますか? –

+0

RazorのSQLボキャブラリが非常に限られている可能性はありますか?あなたは確かにそのようなロジックをストアドプロシージャに入れて、それを呼び出すことができます(おそらくあなたのロジックはIMHOでなければなりません)。 –

+0

SQL Serverでクエリを直接実行しても、エラー "--------------------------- データベースマネージャ ------ --------------------- クエリの解析中にエラーが発生しました[トークン行番号= 1、トークン行オフセット= 23、トークンエラー= =] --------------------------- System.Data.SqlServerCe.SqlCeException(0x80004005):クエリの解析中にエラーが発生しました。[トークンラインnumber = 1、トークンラインオフセット= 23、トークンエラー= =] "。何か案は? –

1

1つの方法は、implement a custom membership providerです。これは、自分のユーザーテーブルに対して認証します。アプリケーションは、ユーザー記憶域の特性から切り離され、ASP.NETアプリケーションのユーザー認証のためのよく理解されたモデルです。

+0

私の場合、外部サーバーを使用してユーザーを認証しています。ユーザーが自分のサイトにサインインすると、情報を追加する場所にリダイレクトしたいので、ほとんどの場合これを行う最善の方法です私はそれが私のためだとは思わない。 –

+0

それは十分ですが、外部サーバーに対して認証しているという事実が、メンバーシッププロバイダーモデルで認証を実装する可能性に影響を与えるのはなぜか分かりません。 – devdigital

関連する問題