2011-08-03 13 views
0

私は自分のプロジェクトにVisual Studio 2008、ASP.NET 3.5、C#を使用しています。私はデータベース接続のために3層アーキテクチャを使用しています。 ID、名前、年齢などのフォームを設計しました。データベーステーブルでは、idが主キーです。ページの読み込みでは、IDの次の値をテキストボックスに自動的に表示します。次に、ユーザーは名前、年齢などの他の詳細を入力する必要があります。その後、私はテーブルにデータを提出したい。いずれにせよ、これについての良い考えを示唆することができます。私は3層構造のものが初めてです。IDの自動インクリメントと3段アーキテクチャのテキストボックスに表示

答えて

1

max関数を使用してインクリメント列の最大値を取得できますが、複数の要求がある場合に問題が発生します。

このように、静的変数に値を1回格納し、その値を増やすことができます。

ただし、一部で一度送信をキャンセルすると問題が発生します。

データベースをチェックアウトする必要があり、正規の間隔で最大値をポーリングする必要があり、静的であるかどうかを確認し、それに応じて更新する必要があります。

基本的には、これをよりスムーズに行うためにアルゴリズムを定義する必要があります。

+0

良い答え...... –

+0

私は別の同様の答えのコメントで述べたように、このようなことをするだけで問題を懇願しています。あなたは答えの中でそれに対処しましたが、実際にはシステムのユーザがレコードのIDを見る必要が全くないので、新しいレコードを保存する理由はありません。それは、ユーザーがフォームからIDを設定する本当に良い理由がない限り、避けるべき恐ろしい考えです。私は正当な理由は考えられません。 – stephenbayer

0

まず、あなたがあなたのデータベースからユーザーIDのために示すために、良いアイデアではありません1で、それをインクリメントし、テキストボックス

+0

このようにして重大な問題を引き起こす可能性があります。 IDをロックする必要があります(空レコードを保存してIDを返すなど)。このようにすれば、IDを選択するだけではありません。間違いなく私はこれを信じています。 – stephenbayer

+0

both.Butに私は3Tierアーキテクチャを使用していることが最も重要なことをありがとう。だからストアドプロシージャ、bal、dalなどにコードを書くときにとても気をつけたい – user793987

0

にこの値を設定し、id列

select max(id) from TableName 

から最大値を取得します私たちがUI IDに暗号化する前にIDを送る必要がある場合は、セキュリティの観点から、 プロジェクトで。 あなたのケースでは、IDが自動的にSQLによって生成された場合、表示する必要はありません。 暗号化されていないIDを表示しないようにしてください。

0

これは非常に基本的なものですが、エンティティコードとデータベースレイヤーの接続コードを記述していて非常に共通していて、手動ですべてコーディングすると、エラーが発生しやすく時間がかかり、完全に不要になります。私は真剣に、nettiersフレームワークのようなものを使ってcodesmithのようなツールを使ってコード生成を提案します。

そして、実際にフォームにIDを表示する理由がわかりません。適切な方法は、フォームを使用してエンティティを塗りつぶし、次にデータレイヤを使用してそのエンティティを保存することです。 nettiersのようなフレームワークでは、新しいエンティティか、更新されたエンティティか、変更されたエンティティが追跡され、フレームワークは適切なデータベース呼び出しをすべて処理します。データベースからデータを読み込む必要がある場合を除いて、IDについて実際に知る必要はありません。しかし、データ層から返されたエンティティは、保存後に新しいIDがすでに設定されているはずです。

関連する問題