0

私は上司から、製品を .NET に移行した直後に失われる MS Access 機能を複製するように依頼されました。

この機能は、データベース内のデータ、特にテーブルまたはビューを表形式のグリッドで表示および更新する機能です。

SqlDataAdapter は関連する CRUD メソッドをオンザフライで自動生成し、DataTables を介して入力/更新できるため、ID 列を持つ純粋なテーブルに対して実行できます。

ただし、ビューはややトリッキーです。SQL Server Management Studio では許可されています。ビューで [上位 xx 行を編集] をクリックすると、標準の .NET DataGridView のように見えるいくつかの列のデータを編集できますが、少し魔法のように感じます。

それで、いくつか質問があります:

キーがビューにない場合でも、SSMS は使用する主キーをどのように推測しますか?

SSMS は、ビュー内のどの列を編集/挿入/削除できるか、またはできないかをどのように判断しますか?

これを .NET アプリケーション内で複製するための最良のオプションは何ですか?

データベースへの常時直接接続を持つ古いスタイルの oledb / obdc 接続に DataGridView を接続することは可能ですか?

通常どおりのガイダンスは高く評価されます。

マロン

4

1 に答える 1

1

SQL Server ビューは、特定の条件に準拠している限り、単一のテーブルであるかのように更新できます。

ドキュメントから:

更新可能なビュー

次の条件が満たされている限り、ビューを介して基になるベース テーブルのデータを変更できます。

UPDATE、INSERT、および DELETE ステートメントを含むすべての変更は、1 つのベース テーブルからのみ列を参照する必要があります。

ビューで変更される列は、テーブル列の基になるデータを直接参照する必要があります。列は、次のような方法で導出することはできません。

集約関数: AVG、COUNT、SUM、MIN、MAX、GROUPING、STDEV、STDEVP、VAR、および VARP。

計算。他の列を使用する式から列を計算することはできません。集合演算子 UNION、UNION ALL、CROSSJOIN、EXCEPT、および INTERSECT を使用して形成された列は計算になり、更新することもできません。

変更される列は、GROUP BY、HAVING、または DISTINCT 句の影響を受けません。

TOP は、WITH CHECK OPTION 句と一緒にビューの select_statement のどこにも使用されていません。

以前の制限は、ビュー自体に適用されるのと同様に、ビューの FROM 句内のすべてのサブクエリに適用されます。一般に、データベース エンジンは、ビュー定義から 1 つのベース テーブルへの変更を明確に追跡できる必要があります。詳細については、ビューによるデータの変更を参照してください。

SSMS が特別なことをしているとは思いません。ビューの内容を編集すると、テーブルの内容を編集するのとまったく同じ機能が提供されます。ユーザーが上記の条件に準拠しない変更を行おうとすると、SSMS はエラーを表示する可能性があります。

キーがビューにない場合でも、SSMS は使用する主キーをどのように推測しますか?

そうではありません。SQL Server は、一度に 1 つの基になるテーブルしか編集できないため、これを行います。

SSMS は、ビュー内のどの列を編集/挿入/削除できるか、またはできないかをどのように判断しますか?

繰り返しますが、これを決定するのは SSMS ではなく SQL Server です。

これを .NET アプリケーション内で複製するための最良のオプションは何ですか?

すべてのビューが上記の条件に適合している限り、単純にテーブルに対して行っているのと同じことを行いますが、ユーザーが実行できないことを行った場合のエラーを処理する準備をしてください (これは、ユーザーのトレーニングが必要であることを意味します。 SSMS を直接使用している場合と同様です)。

于 2012-05-24T15:32:35.100 に答える