- PR -

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

投稿者投稿内容
華月
常連さん
会議室デビュー日: 2004/05/19
投稿数: 41
お住まい・勤務地: みちのく
投稿日時: 2004-07-05 09:22
おはようございます。
ASP.NET+OracleDB9.0i+Ole DB for Oracleにて開発を行っている者なのですが。
"SELECT * FROM TABLE1"と行うと、データを取得できるのに、
"SELECT FIELD1,FIELD2 FROM TABLE1"とすると、エラーになってしまいます。
エラー内容は、
「制約を有効にできませんでした。1 つ以上の行に、Null か、一意でないか、または外部キー制約違反の値が含まれています。」
Null、及び、外部キーに異常がない事は、数人で確認を行いました。
また、Oracle SqlPlusにて上記2文を実行した所、どちらも異常なくデータを取得できました。
何か心当たりがありましたらご教授願います。

えムナウ
大ベテラン
会議室デビュー日: 2004/06/10
投稿数: 187
お住まい・勤務地: 東京
投稿日時: 2004-07-05 16:32
どのような方法でデータベースにアクセスしていますか?
 OracleDataAdapter? OracleCommand ?
どのような行でエラーが発生していますか?
 OracleDataAdapter.Fill ?
データセットを使っていますか?
 #Fill でデータセットの整合性ででるエラーっぽい
 #使っているなら単純にセレクト文を切り替えることは出来ないはず。
 #* が FIELD1,FIELD2 しかなければ大丈夫か?
データセットはXSDファイルで型指定されていますか?
データセットの構成は現在のデータベースとあっていますか?

と、この辺を教えていただかないと返事をしずらいんではないかと思います。
華月
常連さん
会議室デビュー日: 2004/05/19
投稿数: 41
お住まい・勤務地: みちのく
投稿日時: 2004-07-06 10:55
大変失礼しました。
DBへのアクセスは、OleDbDataAdaptorを使用し、
Fill関数を使用してデータを取得しています。
データセットは、使用しています。
データベースの仕様上FILED1,2以外のフィールドを削除するのは困難です。
クライアントに簡易的に作成して行うことなら出来そうですが。

XSDファイル内にてtype="xs:decimal"等の型宣言は、行われています。
現在のDBとXSD及び、データアダプタの構成に差異が無いことは確認しています。
アダプターの再構築も行いました。

OleDbをコネクションとして使っているため、OleDbDataAdaptorを使用していたのですが、
OracleDbDataAdaptorを使用する方向で試してみます。
アティ
ベテラン
会議室デビュー日: 2003/08/14
投稿数: 91
お住まい・勤務地: KANAGAWA
投稿日時: 2004-07-06 13:25
DBのFILED1,2以外のカラムはNOT NULLのカラムがありますよね?
で、DBとDataSetの構成に差がないと。
であれば、DataSetのFILED1,2以外のNOT NULLカラムはnillableがfalseになってます。
えムナウ
大ベテラン
会議室デビュー日: 2004/06/10
投稿数: 187
お住まい・勤務地: 東京
投稿日時: 2004-07-06 13:36
"SELECT FIELD1,FIELD2 FROM TABLE1" なら、FIELD1,FIELD2 だけをフィールドに持つデータセットを作ったほうがいいと思います。
不要な項目を一緒に入れているデータセットはいろんな問題が発生します。
_________________
えムナウ Microsoft MVP for Visual Developer - C#,2005/01-2007/12
えムナウのプログラミングのページ Blog1 Blog2
華月
常連さん
会議室デビュー日: 2004/05/19
投稿数: 41
お住まい・勤務地: みちのく
投稿日時: 2004-07-07 18:10
返答遅れて申し訳ありません。

NOT NULL対象となっているカラムに対して、nillable?が設定されていませんでしたので、
nillable="false"と追加しました。
また、必要なデータ以外のカラムもデータセットから削除を行いました。

エラー消えませんね。
NOT NULLではないパラメータには、nillable="true"とした方がいいのでしょうか?
もう少し、データセットについて書籍等で調べてみようと思います。
なにか、心当たりありましたら、引き続きご助言いただけますと光栄です。
えムナウ
大ベテラン
会議室デビュー日: 2004/06/10
投稿数: 187
お住まい・勤務地: 東京
投稿日時: 2004-07-07 19:12
未解決ということなので、
現状のSelect文と、xsdファイルXMLのこんな感じの項目部分を教えてもらうと、
状態がわかるのではないかと思います。
<xs:element name="名前" type="xs:string" minOccurs="0" />
<xs:element name="点数" type="xs:int" minOccurs="0" />
<xs:element name="画像" type="xs:base64Binary" minOccurs="0" />
華月
常連さん
会議室デビュー日: 2004/05/19
投稿数: 41
お住まい・勤務地: みちのく
投稿日時: 2004-07-17 09:42
返信が遅れて申し訳ありません。
別の業務に飛ばされてまして・・・><

DBの方に復活したわけですが、原因らしきものが見えました。
ほしいデータが、Data1である時、
Select Data1,Data2,Data3 From Table1 Where Data2 = x And Data3 = y
とすると、正常に動作するのですが、
Select Data1 From Table1 Where Data2 = x And Data3 = y
とすると、一意でないといわれてしまいます。
同様にSelect * とすると、値を正常に返します。

しかし、この方法を用いると、
Where 〜 in 〜 の比較対象要素に使うときに複数のデータが返ってきてしまい、対象として正常でなくなってしまいます。
なぜこのようになってしまうのでしょうか。
ご教授いただければ光栄です。

えムナう様>xsdファイルの方は、以下のようになっています。
サンプルは、簡易化してある為、下記ファイルとは多少食い違うかもしれません。
<xs:element name="Table1">
<xs:complexType>
<xs:sequence>
<xs:element name="Data1" type="xs:decimal" />
<xs:element name="Data2" type="xs:decimal" />
<xs:element name="Data3" type="xs:decimal" />
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:unique name="DataSetKey1" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:Table1" />
<xs:field xpath="mstns:Data2" />
<xs:field xpath="mstns:Data3" />
</xs:unique>

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