- - PR -
ASP.NETにて、DBに対してフィールド指定が出来ない。
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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-07-17 13:55
それでは、xsdやデータセットオブジェクトは、結構細切れにして使うということでしょうか。
Selectで取得する必要のあるデータのみをxsdにまとめるわけですね。 てっきり使用するデータ(whereも含めて)は、全て入っている必要があるものと。 今からやってみます。 | ||||
|
投稿日時: 2004-07-20 11:47
もし、VS.NET上のデザイナで、データベースのテーブル構成を、リレーションまでそっくり再現したDataSetを作っているなら、もう一つDataSetを作り直しましょう。 テーブルAがテーブルBを参照していて、テーブルAだけFillなどでデータを持ってくると、参照が解決できないという例外が発生します。例外を一時的に無効にすればいいのですが、それよりもルーズなDataSetを作った方が早いでしょう。 また、DataSetはデータベースのコピーである必要はありません。データベースへ書き戻しを行わないなら、ビューのように使うことも可能です。 | ||||
|
投稿日時: 2004-07-21 14:20
ご返答ありがとうございます。 あれからしばらく使っていてだいぶ(?)分かってきました。 DataAdapterを行うSQLの数だけ作成し、それにより取得するテーブル構成(?)を全て抱擁するDatasetを作成しています。 以前は、DataAdapterにSQLを与える際に、Select * 〜としていて、実際に取得しないデータまでxsdファイルの一端にさせていた為、こういった現象が発生してしまっていたと認識してます。 それとまさしくおっしゃるとおりで、Fillによる閲覧だけの使用です。 こういった場合は、PrimaryKey等による制約を削除しても問題ないのですね。 | ||||
|
投稿日時: 2004-07-21 14:37
使用する用途にもよりますが新規のデータセットを作成しなくてもDataSetそのものを 使用する選択肢もあります あと1レコードのみならSqlCommandを使用したほうがいい場合もありますので 状況に応じて使い分けするといいと思います。 |