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

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

C# と VB.NET の入門サイト

TableAdapterで取得したDataTable

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■90252 / inTopicNo.1)  TableAdapterで取得したDataTable
  
□投稿者/ 富士山 (1回)-(2019/02/20(Wed) 11:26:00)

分類:[.NET 全般] 

データベースのテーブルには下記のような情報があります。
・Name
・Address
・Age
・ID

これを元にウィザードを使ってTableAdapterを作成しました。
TableAdapterの「クエリの追加」(ウィザードを使って)から新しくクエリを追加しました。
SQLは

select Name,Age from T where age = 20;

のようにし、GetDataXという名前にします。これでDataTableを返してくれます。

var dt = new TableAdapter().GetDataX();

このようにしてDataTableを取得しました。
DataTableの中身を確認してみると、Name,Address,Age,IDの全てのフィールドがDataTableにセットされています。

これは普通の動きなのでしょうか?予想では、Name,Ageのフィールドしか表示されないと思っていました。

MySQLを使っているのでDBDataSet.xsdにある対象のテーブルを消して新しくMySQLから
テーブル情報を持ってきたり、テーブルアダプタ名を変えたりしましたが結果は変わりませんでした。
何か釈然としないものがあります。


引用返信 編集キー/
■90254 / inTopicNo.2)  Re[1]: TableAdapterで取得したDataTable
□投稿者/ WebSurfer (1771回)-(2019/02/20(Wed) 14:01:09)
No90252 (富士山 さん) に返信

> DataTableの中身を確認してみると、Name,Address,Age,IDの全てのフィールドがDataTableにセットされています。

最初に Name, Address, Age, ID 全フィールド取得のための Fill,GetData() を作り、それに以下の記事の「D. テ
ーブルアダプタへのクエリ追加」のセクションに書いてあるように条件付クエリ追加したということですか?

7.6 データコンポーネント機能によるデータアクセスコンポーネントの開発
https://www.atmarkit.co.jp/fdotnet/bookpreview/vs2005webapp_07/vs2005webapp_07_03.html

で、質問者さんの場合は select Name,Age from T where age = 20; と Address, ID がないクエリをベース
に GetDataX を作成したのですよね。

Visual Studio が自動生成した TableAdapter の GetDataX のコードを見てください。

たぶん、TableAdapter の SELECT クエリを select Name,Age from T where age = 20 に差し替えて、Name,
Address, Age, ID 全フィールドを格納する型付 DataTable に、

this.Adapter.Fill(dataTable);

・・・というように Fill して、Fill した dataTable を返すようになっていると思います。

それで例外がスローされなかったのは何故か分かりませんが、とにかく元の Fill,GetData() を作ったとき
に設定したフィールドと異なるのは NG です。

(自分の SQL Server 利用の環境では ConstraintException がスローされ、"制約を有効にできませんでした。
行に入力できるのは、Null 以外の値、一意な値、あるいは外部キーですが、この制約の違反が 1 つ以上の行
で発生しています。" というエラーメッセージが出ます)

GetDataX のクエリも全フィールド取得するようにしてください。



引用返信 編集キー/
■90308 / inTopicNo.3)  Re[2]: TableAdapterで取得したDataTable
□投稿者/ 富士山 (2回)-(2019/02/25(Mon) 15:45:25)
No90254 (WebSurfer さん) に返信
> ■No90252 (富士山 さん) に返信
>
>>DataTableの中身を確認してみると、Name,Address,Age,IDの全てのフィールドがDataTableにセットされています。
>
> 最初に Name, Address, Age, ID 全フィールド取得のための Fill,GetData() を作り、それに以下の記事の「D. テ
> ーブルアダプタへのクエリ追加」のセクションに書いてあるように条件付クエリ追加したということですか?
>
> 7.6 データコンポーネント機能によるデータアクセスコンポーネントの開発
> https://www.atmarkit.co.jp/fdotnet/bookpreview/vs2005webapp_07/vs2005webapp_07_03.html
>
> で、質問者さんの場合は select Name,Age from T where age = 20; と Address, ID がないクエリをベース
> に GetDataX を作成したのですよね。
>
> Visual Studio が自動生成した TableAdapter の GetDataX のコードを見てください。
>
> たぶん、TableAdapter の SELECT クエリを select Name,Age from T where age = 20 に差し替えて、Name,
> Address, Age, ID 全フィールドを格納する型付 DataTable に、
>
> this.Adapter.Fill(dataTable);
>
> ・・・というように Fill して、Fill した dataTable を返すようになっていると思います。
>
> それで例外がスローされなかったのは何故か分かりませんが、とにかく元の Fill,GetData() を作ったとき
> に設定したフィールドと異なるのは NG です。
>
> (自分の SQL Server 利用の環境では ConstraintException がスローされ、"制約を有効にできませんでした。
> 行に入力できるのは、Null 以外の値、一意な値、あるいは外部キーですが、この制約の違反が 1 つ以上の行
> で発生しています。" というエラーメッセージが出ます)
>
> GetDataX のクエリも全フィールド取得するようにしてください。
>
>
>
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ