- PR -

ASP.NETにて、DBに対してフィールド指定が出来ない。

投稿者投稿内容
えムナウ
大ベテラン
会議室デビュー日: 2004/06/10
投稿数: 187
お住まい・勤務地: 東京
投稿日時: 2004-07-17 13:46
Select Data1,Data2,Data3 From Table1 Where Data2 = x And Data3 = y
の xsd は以下のようになっているようですね。
<xs:element name="Data1" type="xs:decimal" />
<xs:element name="Data2" type="xs:decimal" />
<xs:element name="Data3" type="xs:decimal" />

Select Data1 From Table1 Where Data2 = x And Data3 = y
の xsd は以下のようにしたほうが無難です。
<xs:element name="Data1" type="xs:decimal" />

同じ xsd を使用するからトラブルを生むのです。

今回どうして問題になったかというと、Data2・Data3 が PrimaryKey 指定してあるにもかかわらず、
Select の項目に入っていないので、必須項目(Data2・Data3)のデータが null となってしまったからです。

Select 文を変更したときに、Formデザイン画面の下に xxxDbDataAdaptor が有るのなら、
プロパティのデータセットの作成でデータセットを再作成すると幸せになれると思います。
_________________
えムナウ Microsoft MVP for Visual Developer - C#,2005/01-2007/12
えムナウのプログラミングのページ Blog1 Blog2
華月
常連さん
会議室デビュー日: 2004/05/19
投稿数: 41
お住まい・勤務地: みちのく
投稿日時: 2004-07-17 13:55
それでは、xsdやデータセットオブジェクトは、結構細切れにして使うということでしょうか。
Selectで取得する必要のあるデータのみをxsdにまとめるわけですね。
てっきり使用するデータ(whereも含めて)は、全て入っている必要があるものと。
今からやってみます。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-07-20 11:47
引用:

華月さんの書き込み (2004-07-17 13:55) より:
それでは、xsdやデータセットオブジェクトは、結構細切れにして使うということでしょうか。
Selectで取得する必要のあるデータのみをxsdにまとめるわけですね。
てっきり使用するデータ(whereも含めて)は、全て入っている必要があるものと。
今からやってみます。


 もし、VS.NET上のデザイナで、データベースのテーブル構成を、リレーションまでそっくり再現したDataSetを作っているなら、もう一つDataSetを作り直しましょう。
 テーブルAがテーブルBを参照していて、テーブルAだけFillなどでデータを持ってくると、参照が解決できないという例外が発生します。例外を一時的に無効にすればいいのですが、それよりもルーズなDataSetを作った方が早いでしょう。

 また、DataSetはデータベースのコピーである必要はありません。データベースへ書き戻しを行わないなら、ビューのように使うことも可能です。
華月
常連さん
会議室デビュー日: 2004/05/19
投稿数: 41
お住まい・勤務地: みちのく
投稿日時: 2004-07-21 14:20
引用:

Jittaさんの書き込み (2004-07-20 11:47) より:
 もし、VS.NET上のデザイナで、データベースのテーブル構成を、リレーションまでそっくり再現したDataSetを作っているなら、もう一つDataSetを作り直しましょう。
 テーブルAがテーブルBを参照していて、テーブルAだけFillなどでデータを持ってくると、参照が解決できないという例外が発生します。例外を一時的に無効にすればいいのですが、それよりもルーズなDataSetを作った方が早いでしょう。

 また、DataSetはデータベースのコピーである必要はありません。データベースへ書き戻しを行わないなら、ビューのように使うことも可能です。



ご返答ありがとうございます。
あれからしばらく使っていてだいぶ(?)分かってきました。
DataAdapterを行うSQLの数だけ作成し、それにより取得するテーブル構成(?)を全て抱擁するDatasetを作成しています。
以前は、DataAdapterにSQLを与える際に、Select * 〜としていて、実際に取得しないデータまでxsdファイルの一端にさせていた為、こういった現象が発生してしまっていたと認識してます。
それとまさしくおっしゃるとおりで、Fillによる閲覧だけの使用です。
こういった場合は、PrimaryKey等による制約を削除しても問題ないのですね。
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-07-21 14:37
引用:

華月さんの書き込み (2004-07-21 14:20) より:

DataAdapterを行うSQLの数だけ作成し、それにより取得するテーブル構成(?)を全て抱擁するDatasetを作成しています。



使用する用途にもよりますが新規のデータセットを作成しなくてもDataSetそのものを
使用する選択肢もあります
あと1レコードのみならSqlCommandを使用したほうがいい場合もありますので
状況に応じて使い分けするといいと思います。

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