0

こんにちは、AngularJs と c# wcf restful サービスを使用して小さな Web アプリを構築しています。提供されたユーザー名/パスワードが正しいかどうかを検証する最小限のコードを含むストアド プロシージャを持つログイン モジュールがあります。コードは次のとおりです。

 alter procedure sp_loginTable
(
@username varchar(50),
@password varchar(25),
@output bit out
)
as

declare @queryedUsername varchar(50)
declare @queryedPassword varchar(25)
select @queryedUsername =username,@queryedPassword=password from userLoginTable where username='surya'
if ((@queryedUsername=@username) and (@queryedPassword=@password))
SET @output=1
ELSE
 SET @output=0
GO

そして、テーブルに保存されているパスワード「123456aA」があります.入力として「123456aa」を指定すると、コードは常に1を返します..そして、人々が文字列比較に関するさまざまな解決策を提案した多くのスタックオーバーフローの質問を検索しましたが、コード非常に大きい..

文字列比較は、次のように記述すれば、C# で簡単に実装できます。

string nameone = "123456aA";
string nametwo = "123456aa";
Console.WriteLine(nameone.Equals(nametwo));//returns false

適切な文字列比較を行う equal メソッドがあります。

ログイン検証をdataAccessLayerに移動するのが最善ですか、それともストアドプロシージャで検証を実行する必要がありますか..c#には文字列を処理する組み込み関数があるため、この検証のためだけにストアドプロシージャに大量のコードを記述したくないスムーズに比較..

貴重な情報を提供してください..

ありがとう

4

1 に答える 1

3

ビジネス ロジックをどこに格納するかについては、データベース、ビジネス レイヤー、または別のレイヤーなど、多くの議論があります。

誰がデータベースにアクセスできるか (プロセスなど) を検証することについて話しているのではなく、アプリケーション (および間接的にデータベース) にアクセスできるユーザーを検証することについて話していると思います。

その場合、これは私の意見です:

  • データベースの責任は、データを保存し、要求に応じて非常に迅速に利用できるようにすることです。データを利用可能にすることは sql によって行うことができますが、ストアド プロシージャが役立ちます。したがって、データベースはデータの管理について心配する必要があります。
  • DataAccessLayer の役割は、コードからデータベースへの評価を容易にすることです。クライアント コードは単一の関数を呼び出すだけで、その関数がデータベースへの接続を作成したり、コマンドを作成したりします。
  • あなたの質問にない別のコンポーネントは、BusinessLayerまたはBusinessLogicLayerです。彼の責任は、すべての機能的なことを行うことです。計算、ビジネス ルールの確認、検証など。ビジネス ロジックは、ユーザー インターフェイスと DataAccessLayer の間に配置されます。

ユーザー名/パスワードの検証はアプリケーション機能の一部であるため、BusinessLogic 内に属します。

于 2013-04-28T08:23:54.457 に答える