- PR -

チェックボックスエラー

投稿者投稿内容
BBSR
大ベテラン
会議室デビュー日: 2006/08/30
投稿数: 121
お住まい・勤務地: 大阪
投稿日時: 2007-11-12 17:25
お世話になります

Gridviewで検索し一致したIDでFoamviewで表示
FormVisew内にチェックボックスを設置しDBと連結させると下記のメッセージがでます
■型 'DBNull' から型 'Boolean' への変換は無効です
クエリ内でDBを連結させています(IDで)
DB1→DB2

DB1内にあるチェックボックスは表示変更等可能ですがDB2内にあるチェックボックスのみエラーメッセが出る症状ですわかる方宜しくお願いします。
DB:Access
XPpro
visualStudio(WEB)
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-11-12 17:58
引用:

BBSRさんの書き込み (2007-11-12 17:25) より:
お世話になります

Gridviewで検索し一致したIDでFoamviewで表示
FormVisew内にチェックボックスを設置しDBと連結させると下記のメッセージがでます
■型 'DBNull' から型 'Boolean' への変換は無効です
クエリ内でDBを連結させています(IDで)
DB1→DB2

DB1内にあるチェックボックスは表示変更等可能ですがDB2内にあるチェックボックスのみエラーメッセが出る症状ですわかる方宜しくお願いします。
DB:Access
XPpro
visualStudio(WEB)


何がわかる人を求めているのかわかりませんが、例外が発生する理由はわかります。メッセージの通り、DbNull を Boolean に変換できないからです。

過去、同じような質問を連発していませんか?
よく見直して、コピーするのではなく、学ぶことを勧めます。
BBSR
大ベテラン
会議室デビュー日: 2006/08/30
投稿数: 121
お住まい・勤務地: 大阪
投稿日時: 2007-11-27 16:20
お返事ありがとうございます
クエリでDBを連結させるとチェックボックスだけにエラーがでるのですが・・・
回避方法などあればお願いしたいのです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-11-27 16:35
引用:

BBSRさんの書き込み (2007-11-27 16:20) より:

クエリでDBを連結させるとチェックボックスだけにエラーがでるのですが・・・
回避方法などあればお願いしたいのです。


話が進んでいないようですね。 "CheckBox だけ" と言われてもそれは DBNull を System.Boolean にキャストしようとして失敗しているだけです。 まずここを理解してみてください。 難しい話ではないのですが、これを理解しないと回避方法を聞いても意味がわからないと思うのです。

回避方法ですがいくつか方法は考えられます。 <asp:CheckBox ...> にある Checked 属性に何らかの回避メソッドを差し込むことを考えたり、SQL クエリから回避することを考えたり、型付 DataSet の利用を検討して DBNull 時の動作を変更してみるなどなどです。

検索はしていませんが、どれも過去ログに答えはあるハズです。
(何度か答えたことがあります)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-11-27 21:39
引用:

じゃんぬねっとさんの書き込み (2007-11-27 16:35) より:
型付 DataSet の利用を検討して DBNull 時の動作を変更してみる


自前で用意するなら別ですが、デザイナに用意してもらうなら、変更できるのは string の時だけですorz
前から薄々気がついていたけど、VS2005 だとはっきりそう言ってくれる。。。


引用:

BBSRさんの書き込み (2007-11-27 16:20) より:
DB1内にあるチェックボックスは表示変更等可能ですがDB2内にあるチェックボックスのみエラーメッセが出る症状です

クエリでDBを連結させるとチェックボックスだけにエラーがでるのですが・・・


 「クエリでDBを連結させる」とか、「DB2内にあるチェックボックスのみ」に対しては、とりあえず「うっそだぁ〜!」と言っておきます。
どんな場合であろうとも、DBNull を Boolean に変換することはできません。
# 唯一の例外は、System.String で受けるとき、適切に設定してあること

 そうではなく、DB2 にあるデータにエラーがある(データが間違っている|必要なはずのデータが入っていない)可能性を指摘します。
その状態が適切なら、コードで対応する必要があるでしょう。


[ メッセージ編集済み 編集者: Jitta 編集日時 2007-11-27 21:40 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-11-28 00:51
引用:

Jittaさんの書き込み (2007-11-27 21:39) より:

自前で用意するなら別ですが、デザイナに用意してもらうなら、変更できるのは string の時だけですorz


Visual Studio のデザイナからだと System.String のみでしたっけ。 そういえば、「DataSet で利用できないようでは Nullable の意味合いが薄くなる」 とクレームを入れたことを忘れていました。 次のバージョンでは Nullable 対応してくれると超強力になりますね。

それにしてもデザイナから自動生成されるのは便利ですが、ソースが見えにくくなっていることもあって学習する機会が奪われてしまいますね。 今回のもその典型例と言っても良いかもしれません。(自分のせいでないという思いをする人もいるかもしれません)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-11-28 21:53
引用:

じゃんぬねっとさんの書き込み (2007-11-28 00:51) より:
Visual Studio のデザイナからだと System.String のみでしたっけ。 そういえば、「DataSet で利用できないようでは Nullable の意味合いが薄くなる」 とクレームを入れたことを忘れていました。 次のバージョンでは Nullable 対応してくれると超強力になりますね。


http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=2350821&SiteID=7
こちらの都合で確認したので、System.String だけ、です。
デザイナでは、Nullable<int> とは書けませんでした。デザイナで指定できるのは、SQL Server で用意されている型に対応する型だけのようです。
おそらく、 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=42322&forum=7&4 こちらの質問も、デザイナ上では設定できないためのものかと思いました。
Nullable だけでなく、デザイナが任意の型に対応できればいいのかも?でも、データベースの型との整合は?とはいえ、PostgreSQL で、任意の型を作っている場合はどうなる?

 それでも DBNull は「特殊値」扱いで良いと思います。


引用:

BBSRさんの書き込み (2007-11-27 16:20) より:
クエリでDBを連結させる


ああ、もう一つありました。

  1. DB2 のデータにエラーがある可能性
  2. DB2 と DB1 の連携が取れていない可能性
  3. DB2 にデータが抜けている可能性
  4. DB1 と DB2 の連結式が間違っている可能性 *追加

BBSR
大ベテラン
会議室デビュー日: 2006/08/30
投稿数: 121
お住まい・勤務地: 大阪
投稿日時: 2007-11-28 22:13
お返事ありがとうございます
1DBにエラーはありませんYesNo型です
2連結はID同士連結させてます
3はいデータは抜けていますYesの場合だけ表示することに確認がとれました
4テキストボックスは普通にバインドされていますので間違いはないかと・・・

しかしDB1側のチェックボックスは、データーが抜けているのに通常表示します
DB2だけだめみたいです????

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