C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.81805 の関連記事表示

<< 0 >>
■81805  Re[3]: データベースからのデータ読込
□投稿者/ 魔界の仮面弁士 -(2016/11/15(Tue) 16:03:49)
    No81804 (夜叉丸 さん) に返信
    > MainDataSet.xsd のデザイン編集で
    > クエリの追加を行って以下のコードを記入します。

    Main 側に追加しているのだとしたら、まずそこが間違っています。

    Main テーブルは NAME をキーとしており、
    現時点で 2 行のデータが入る事が期待されますよね。


    しかし作成した GetMainSubName のクエリーは、
    SUBNAME をキー(あるいは PrimaryKey なし)とした、
    4 行のデータであるはずです。

    でもそれは Main ではなく、むしろ Sub のテーブルの構造ですよね?


    ですからデザイン時に行う作業としては、以下のいずれかにしてみてください。

    (案1) JOIN 結果の格納先は、Main でも Sub でもなく、
      別の DataTable として TableAdapter を構成する。

    (案2) Sub テーブル側に、GetMainSubName のクエリーを追加する。


    サーバー側に問い合わせを行うのなら、通常は案 1 で良いと思います。
    Main や Sub は 2 列構成ですが、JOIN 結果は 3 列構成なので、
    今回のケースではこれが妥当かと思います。

    もしも案2 を選択するのであれば、Sub の DataTable に、デザイン時に
    SUBNAME な列も追加しておけば OK です。(デザイン時に SUBNAME 列を
    追加していなかったとしても、インデクサ指定で扱うことができます)

    ただし、JOIN 結果のために SUBNAME 列を追加しておいた場合、
    既定の GetData/Fill で取得したデータ(SUBNAME 列の無い SELECT SQL)では、
    SUBNAME 列に入る値が無いため、その列の値は NULL 値として処理されます。


    なお、編集結果をデータベース側に復元する事を考えているのであれば、
    先の回答のように、リレーション構成にしてクライアント側で連結させるか、
    あるいは、案2 を用いて、Sub の DataTable 側で処理すれば OK です。




    > EnforceConstraints を使えばよいらしいですが

    そもそも EnforceConstraints は既定で有効になっています。

    EnforceConstraints が true な状態では、

    ・PrimaryKey な列に、同じデータが重複登録された場合
    ・MaxLength を超える長さのデータが登録された場合
    ・AllowDBNull = false な列が NULL 値の状態であった場合
    ・DataRelation に違反するようなデータ構成になった場合

    などの不整合が検出され、エラー(というか例外)として通知されますが、
    EnforceConstraints を切ってしまうと、そういった違反データを
    DataTable に登録できてしまうことになりますよ。
記事No.81800 のレス /過去ログ139より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -