0

短いバージョン:

FK が null になる可能性があるため、左結合を持つ SelectCommand を持つデータ ソースにバインドされたグリッド ビューがあります。更新時に、FK が null の場合は FK テーブルにレコードを作成し、親テーブルを新しいレコード ID で更新したいと考えています。これは SqlDataSources だけで可能ですか?

詳細版:

Company と Address の 2 つのテーブルがあります。列 Company.AddressId は null にすることができます。私の ascx ページでは、SqlDataSource を使用して会社と住所の左結合を選択し、GridView を使用して結果を表示しています。SqlDataSource の UpdateCommand と DeleteCommand で、セミコロンで区切られた 2 つのステートメントを実行することで、GridView の編集機能と削除機能を使用して、両方のテーブルを同時に更新できます。

私が抱えている問題は、Company.AddressId が null の場合です。私が行う必要があるのは、データ ソースで Address テーブルにレコードを作成し、Company テーブルを新しい Address.ID で更新してから、通常どおり更新を続行することです。一貫性/シンプルさのために、可能であればデータソースのみでこれを行いたいと思います。私のデータ ソースでこれを行うことは可能ですか、それともページに 2 番目のデータ ソースを追加してこの処理の一部を処理することはできますか?

それが機能したら、おそらくInsertCommandでも機能させる方法を理解できるでしょうが、もしあなたが順調に進んでいて、それを飛ばす方法についての答えを持っているなら、それを自由に提供してください。

ありがとう。

4

1 に答える 1

0

セミコロンで区切られた2つのステートメントを実行します

ここで行っているように、SqlDataSourceを使用して2つのステートメントでINSERTとUPDATEの両方を実行できない理由はわかりません。

ただし、ご存知のとおり、同時に多数のトラフィックまたはユーザーがアプリケーションを使用している場合、あるユーザーが別のユーザーに影響を与える何かを実行し、予期しない結果がカスケードしてデータを台無しにするという問題が同時に発生する可能性があります。一般に、実行していること(主キーまたは外部キーを含むINSERTおよびUPDATE)のような場合、通常はSQLトランザクションが使用されます。ただし、SQLデータベースでSQLストアドプロシージャ(または関数)として実行する必要があります。ただし、ストアドプロシージャを呼び出していることを通知するだけで、SqlDataSourceからそれらを呼び出すことができます。

于 2010-05-26T20:28:54.840 に答える