Webアプリケーション用のグローバル変数の作成-ASP.NET
-
13-10-2019 - |
質問
DBに接続するためにWebアプリケーションを構築しています。これまでのところ、私はそれに対処することができました(ただし、Bll&Dalを構築しませんでしたが)。
列「ID」があるテーブルがあります。 SQLサーバーでそれを宣言する方法が自動的にインクリメントされると宣言する方法があることは知っています。 (しかし、私はそれを望んでいません)。
値を保持するグローバルアプリケーション変数を宣言したいと思います。
私には2つの質問があります:
どうやって宣言しますか?
どこで作成して初期化しますか? (いくつかのログインページがあります)。
ありがとう!
詩
誰かが私にストアドプロシージャでDALを構築するにはどうすればよいか教えてくれたら役立ちますか?そして、私が必要とするもののために、私がDALでできないBLLを使用しますか?
解決
使用できます Application
オブジェクト - それはの一部です HttpContext
任意のページで直接アクセスできます。
使用したくない場合は、書きたいかもしれません Globals
静的メンバーを保持するクラス(またはあなたが好きな名前)。
public class Globals
{
public static int Counter { get; set;}
}
// accessed from other classes:
Globals.Counter++;
どちらのアプローチも、WebファームまたはいくつかのWebアプリケーションを持っていることではなく、再起動に耐えられません。
これらのオプションに関係なく、適切なソリューション(使用したくない場合でも - 理由を説明できますか?)は、IDフィールドを使用することです。 IDENTITY
句。
他のヒント
変数を保存することは簡単な部分です。独自のID生成と競合と並行性の問題を管理することは難しい部分です。幸運を。
ASP.NETにはグローバル変数のようなものはありません。覚えておいてください、HTTPは無国籍です。
あなたが来ることができる最も近いのは、アプリケーションオブジェクトに何かを保存することです。
Application["myvar" ] = x;
x = Application["myvar"];
しかし、ここでも、この変数はアプリを再起動する必要があるときに失われます。これは時々行うことができます。
あなたが説明するもののはるかに優れたソリューションは、データベース値です。
整数を増やしてから、その増分IDをDBに投げることは危険に満ちています。マルチスレッド?アプリケーションが跳ね返るとどうなりますか? DevとProdの展開は同じ数字のセットを共有していますか?
グローバルに一意の識別子が必要で、データベースの外側で作成できるように聞こえます。それはGUIDの仕事のように聞こえます。確かに、DBでより多くのスペースを占有しますが、おそらくデータベースに対してやろうとしている最悪のことではありません。