トップ回答者
ADO.net DataSetでの値の取得時のDBNullエラーについて

質問
-
毎度お世話になります。ジープです。
前スレの「ADOを利用したSQLServer接続への例外処理」でADO.netへの移行を薦められたため、現在移行作業を行っています。
現在DataAdapterとDataSetを使用し、データベース上からデータを取得するところまではこぎつけたのですが…
DataSetでDBNullを取得すると、デザイナコードで止まってしまいます。
以前のプログラムでは、データベース側ではDBNullを許容しているので、プログラム側でDBNullの場合は無視する、という形をとっていたので、今回も同じようにしたかったのですが…
気持ちデザイナコードでのCatch部分を削除したいけど…やっぱデザイナコードいじるのはよくないですよね…
正攻法としては値の取得側でTry~Catchで例外を取得して、無視させるしかないんでしょうか…
この場合はどのような処理がもっとも正しいのでしょうか?
ご教授願います。
~~~~~~コード~~~~~~
sub SetListViewData()
Dim l_strName as String
if Me.DataSet1.個人テーブル.Item(0).氏名 Is System.DBNull.Value Then
l_strName = Me.DataSet1.個人テーブル.Item(0).氏名
l_strName = l_strName.Trim(" ")
ListView1.Items.Add( l_strName)
End if
End sub
回答
-
ジープ さんからの引用 sub SetListViewData() Dim l_strName as String
if Me.DataSet1.個人テーブル.Item(0).氏名 Is System.DBNull.Value Then
l_strName = Me.DataSet1.個人テーブル.Item(0).氏名
l_strName = l_strName.Trim(" ")
ListView1.Items.Add( l_strName)
End if
End sub
Me.DataSet1.個人テーブル.Item(0).Is氏名Null() というメソッドがあるはずです。
提示されたプログラムの if 条件も逆になっている気がします。
すべての返信
-
ジープ さんからの引用 sub SetListViewData() Dim l_strName as String
if Me.DataSet1.個人テーブル.Item(0).氏名 Is System.DBNull.Value Then
l_strName = Me.DataSet1.個人テーブル.Item(0).氏名
l_strName = l_strName.Trim(" ")
ListView1.Items.Add( l_strName)
End if
End sub
Me.DataSet1.個人テーブル.Item(0).Is氏名Null() というメソッドがあるはずです。
提示されたプログラムの if 条件も逆になっている気がします。 -
trapemiyaさん、えムナウさん返信ありがとうございます。
trapemiya さんからの引用 手っ取り早くは、SQL文でISNULL関数を使って、nullを空白文字に変えてしまうという方法があります。 データベース自体に空白文字ですか…
その場合、直にデータベースにレコード追加しちゃった場合はDBNULL入っちゃうんですよね…(自分以外の人もそのツール、データベースに触ることがあると思われる)
#空白といえば、今adpファイル使ってるんですが、データベースのchar30のレコードに”aaa”と入れた場合は、aaaのあとに27文字文空白文字が入っており、値の取得ごとにTrimしなければならず異様にムカついた記憶が…w
えムナウ さんからの引用 Me.DataSet1.個人テーブル.Item(0).Is氏名Null() というメソッドがあるはずです。 探してみたらありました!
こんなメソッドあったとは…初めて知りました…
便利なので使わせていただきます(ノ・ω・)ノ
#Is**Nullって関数名、わかりやすいのはいいと思うのですが、ヘルプなどで情報検索する場合って絶対ヒットしないですよね…自分的にはあんましよくないと思うのですがね…
えムナウ さんからの引用 提示されたプログラムの if 条件も逆になっている気がします。 ぉl
ごめんなさいNotぬけてました…
ソース貼り付けではなくて、目コピーでやったので…
申し訳ないですorz
お二人の助言により、無事解決できました。
ありがとうございました。またよろしくお願いします^^
-
-
trapemiya さんからの引用 勘違いされているかもしれないので、念のために書いておきます。ISNULL関数は例えば、
select ISNULL(hoge, '') from HogeTable
のように使います。hogeがnullの場合は、空白文字を返します。
あ、SQL分の値の取得時に使うのですか(・∀・ )
データベース書き込み時にやるのかとてっきり…(ノ∀`)
trapemiya さんからの引用 よく見たら型付データセットなんですね。Orz ですです(・ω・`)
んでもTabelAdaptarへ記入するSelect文につかえそうですね。
ありがとうございます(・∀・)