- PR -

抽出結果について

投稿者投稿内容
オウドー
ベテラン
会議室デビュー日: 2007/06/05
投稿数: 59
投稿日時: 2007-07-30 12:36
皆様こんにちは。オウドーと申します。
使用しているDBMSはSQL-Server2005 使用言語:C#です。
さて早速ですが質問を申します。

Aテーブル

社員コード 社員名 入社日
  1    ○○  2007
  2    □□  2006
  3    △△  2005

//社員コードはオートインクリメントです。
//全てNULL許容はしてません。
例えばこのようなテーブルがあると仮定します。
そして、FillメソッドにてSQLを定義します。

select 社員名 as 社員の名前,入社日 as 入社の日 from Aテーブル

当然、Aテーブルの「社員の名前」列及び、「入社の日」がDataSetの中にDataTableとして生成されます。
しかし、困ったことに既存のテーブルの横に抽出したクエリがひっついている状況なんです。以下のような状況です。

社員コード 社員名 入社日 社員の名前 入社の日
  1            ○○    2007
  2        □□   2006
  3     △△   2005

//かなりずれておりますが○□△は社員の名前!
//年は入社の日!!
//1,2,3は社員コードです。
//直せば早いのですがさらにミスを犯すとえらいことになりそうなので
//よろしくお願いします。編集

これで、DataRowなどで列を追加したときエラーが起きてしまいとても迷惑です。
私が教えて欲しいことは以下の2点です。

抽出結果だけを返すことは可能か。
可能とすればどのようにして抽出結果だけを返してくれるか。

よろしくお願いします。



[ メッセージ編集済み 編集者: オウドー 編集日時 2007-07-30 12:38 ]
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-07-30 14:05
コードが書いてないんでなんともいえませんが、Fillする直前に.Columns.Clear()すればいいなじゃないですかね。
オウドー
ベテラン
会議室デビュー日: 2007/06/05
投稿数: 59
投稿日時: 2007-07-30 15:22
引用:

べるさんの書き込み (2007-07-30 14:05) より:
コードが書いてないんでなんともいえませんが、Fillする直前に.Columns.Clear()すればいいなじゃないですかね。



返答ありがとうございます。
べるさんが申しましたことを試してみた結果以下のようなエラーがでました。

この列は、主キーの一部であるため、削除できません。

DataSetの中にDataTableがありテーブル選択し、右クリック→追加→クエリー→
SQLを打ち込み→C#上でFill呼び出し。

上記の工程でブレークポイントを置きDataSetの中を参照してみると不要な列が残ります。
不要な列とは初めにお話した件にお話したとおりです。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-07-30 15:53
引用:
この列は、主キーの一部であるため、削除できません。

主キーはDataTable.PrimaryKeyで操作できますよ。
ただ、不要な列が「残る」ということは、どっかで追加したものなんですよね。それはどこなんでしょう。

引用:
DataSetの中にDataTableがありテーブル選択し、右クリック→追加→クエリー→
SQLを打ち込み→C#上でFill呼び出し。

これ、どこのことを言ってるのかわかりませんでした。(データセットのデザイナか何かかな。。)
そもそも何プロジェクトですか?webアプリとかwindowsアプリとか。

オウドー
ベテラン
会議室デビュー日: 2007/06/05
投稿数: 59
投稿日時: 2007-07-30 16:04
引用:

べるさんの書き込み (2007-07-30 15:53) より:
引用:
この列は、主キーの一部であるため、削除できません。

主キーはDataTable.PrimaryKeyで操作できますよ。
ただ、不要な列が「残る」ということは、どっかで追加したものなんですよね。それはどこなんでしょう。

引用:
DataSetの中にDataTableがありテーブル選択し、右クリック→追加→クエリー→
SQLを打ち込み→C#上でFill呼び出し。

これ、どこのことを言ってるのかわかりませんでした。(データセットのデザイナか何かかな。。)
そもそも何プロジェクトですか?webアプリとかwindowsアプリとか。





お返事ありがとうございます。

(データセットのデザイナか何かかな。。)
↑その通りです。分かりにくく申し訳ありません。Windowsアプリです。

ただ、不要な列が「残る」ということは、どっかで追加したものなんですよね。それはどこなんでしょう。


データセットをクリアしてからすぐにFillにて呼び出しを行ってるので不要な列が残るってことはないとは思うのですがいかがでしょうか。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-07-30 17:32
引用:
データセットをクリアしてからすぐにFillにて呼び出しを行ってるので不要な列が残るってことはないとは思うのですがいかがでしょうか。

その「クリア」とはどんなコードですかね。(「Fill呼び出し」もコード提示がないしいまいち状況がつかめません)

コードを書いた記憶がないなら、とりあえず自動生成されたソースを確認してみてはいかがでしょう。
xsdファイルのどこかに「社員コード」の記述があるんだと思います。

IDEはVisual Studio2005であってますよね?
オウドー
ベテラン
会議室デビュー日: 2007/06/05
投稿数: 59
投稿日時: 2007-07-30 17:43
引用:

べるさんの書き込み (2007-07-30 17:32) より:
引用:
データセットをクリアしてからすぐにFillにて呼び出しを行ってるので不要な列が残るってことはないとは思うのですがいかがでしょうか。

その「クリア」とはどんなコードですかね。(「Fill呼び出し」もコード提示がないしいまいち状況がつかめません)

コードを書いた記憶がないなら、とりあえず自動生成されたソースを確認してみてはいかがでしょう。
xsdファイルのどこかに「社員コード」の記述があるんだと思います。

IDEはVisual Studio2005であってますよね?



お返事ありがとうございます。
this.DataSet.Claer();  クリアのメソッドです。

Fillメソッドは以下の通りです。

this.TableAdapter.FillDefinition(this.DataSet.DataTable,WhereAssumption);
WhereAssumptionには社員コードが入ります。
xsdファイルのどこかですか。ありがとうございます。

IDEはVisual Studio2005であっております。


それにしてもFill使いすぎなのかな。それも不安になってきました。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-07-30 18:53
あ、型付データセットですね。デザイナにカラムとして表示されていたらSELECTするかどうかに関係なく
データセットにカラム自体は入っちゃうと思います。(たとえColumns.Clearできてもダメかも)
クエリ追加するとき「メインスキーマと違います」的な警告でてませんかね。

スキルアップ/キャリアアップ(JOB@IT)