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

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

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

Re[1]: テーブルアダプタからグリッドビューへバインドしたいがNull


(過去ログ 27 を表示中)

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

■12287 / inTopicNo.1)  テーブルアダプタからグリッドビューへバインドしたいがNull
  
□投稿者/ 岩男 (1回)-(2008/01/07(Mon) 16:32:01)

分類:[.NET 全般] 

(文字数の都合で分かりにくいタイトルになっていたら申し訳ありません。)

C# ASP.NETを使用して、参照系のアプリケーションを開発しています。

・App_CodeにSQLでテーブルアダプタを作成しました
・aspxのページ作成の方のソースで、オブジェクトデータソースとグリッドビューを配置しました
・オブジェクトデータソースは、上記テーブルアダプタをビジネスオブジェクトとして選択し、
 グリッドビューにはこのオブジェクトデータソースをデータソースとして選択しました

似たようなことは他でもやっているのですが、今回のSQLでは結果としてNullを取りえます。
これを実行すると、ブラウザに、
 「制約を有効にできませんでした。行に入力できるのは、Null 以外の値、一意な値、
  あるいは外部キーですが、この制約の違反が 1 つ以上の行で発生しています。 」
というエラーが表示されてしまいます。

少し調べてみたところ、DataSetのEnforceConstraintsプロパティをfalseにすればよいようなのですが、
上記の開発方法を取っていると、そもそもデータセットへのアクセスはVSの機能で隠蔽してくれている
のでどこでプロパティを変更していいか分かりません。


ご存知の方、ご教示いただけませんでしょうか。
宜しくお願いいたします。
引用返信 編集キー/
■12531 / inTopicNo.2)  Re[1]: テーブルアダプタからグリッドビューへバインドしたいがNull
□投稿者/ 七曜 (32回)-(2008/01/11(Fri) 11:24:01)
No12287 (岩男 さん) に返信
> 似たようなことは他でもやっているのですが、今回のSQLでは結果としてNullを取りえます。
> これを実行すると、ブラウザに、
>  「制約を有効にできませんでした。行に入力できるのは、Null 以外の値、一意な値、
>   あるいは外部キーですが、この制約の違反が 1 つ以上の行で発生しています。 」
> というエラーが表示されてしまいます。

※以下の内容は、VS2005、SQL Server 2005 Express Editionでの検証結果になります。

情報が限定的なので、問題切り分けのステップも含めておきます。
そもそもSQL文自体がエラーを出しているのではないかと疑ってみますので、
・使用しているデータベースの定義(テーブル構造と制約条件)
・使用しているデータ
を確認します。もし、ここで、テーブルの制約条件に違反しているデータがあれば、
それが原因だと思われますので、この場合には、制約違反のデータを削除するか、制約条件自体を見直すかになります。

例えば、
CREATE TABLE [dbo].[SampleTable1](
	[Column1] [numeric](18, 0) NOT NULL,
	[Column2] [nchar](10) NULL
) ON [PRIMARY]
の様なテーブルで、データのColumn1にNullが入っているとか・・・ですね。

テーブル定義、データ共に問題がない場合には、
・テーブルアダプタで設定しているSQL文
・テーブルアダプタがデータをバインドするデータテーブルの制約
を確認します。ここで、
・SQL文を実行した結果にはNullが含まれる
ということですので、先のテーブル定義SampleTable1を例にしますと
データのColumn2がNullを含むものをSQL文では取得するものとしますので
[Column1] [Column2]
1           aaa
2      (null)
3           ccc
こんな感じのデータが返されるとします。
これをバインドするデータテーブルでColumn2のAllowDBNullプロパティがFalse、つまりNullを許可しない、と設定してある場合、
2番目のデータは、制約条件に違反していますので、ご指摘のエラーメッセージが表示されます。

その他にも原因があるかもしれませんが、いずれにしてもエラーメッセージの通り、
何らかの制約条件に合わない箇所があるわけですので、そこをなおされる事が正しい対応となるかと。



引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -