- PR -

データベースを参照した時のNULLの回避方法について

投稿者投稿内容
初心者
会議室デビュー日: 2007/07/11
投稿数: 2
投稿日時: 2007-07-11 22:45
現在、タイムレコーダーよりcsvにてデータを取得しそのデータをシステム取り込むプログラムを作成中その中で、データグリッドビュー中で有給時間等を補正。
その際に、データベース上にNULLがあると書きプログラムでエラーが発生します。
「型’DBNull’から型’String’への変換名は無効です。
For 〜 Next文でNULLを回避する方法を伝授していただけると助かります。
(まだ4月よりVBを勉強し始めた初心者です。今月中にプログラムを完成させるのがノルマになっており困っています。)

環境:VS2005、SQL2005を利用

Dim dtb1 As DataTable = BRSYSDataSet.Tables("M_WORKINGRESULT")
'有給時間を分換算してPAYHOLIDAY_Mに表示
Dim ph As String
For i As Integer = 0 To dtb1.Rows.Count - 1
ph = dtb1.Rows(i)("PAYHOLIDAY_T")
Dim left As Integer
Dim right As Integer
left = Mid(dtb1.Rows(i)("PAYHOLIDAY_T"), 1, 2) 'PAYHOLIDAY_M列の時間(例:08:45)の08を取得
right = Mid(dtb1.Rows(i)("PAYHOLIDAY_T"), 4, 2) 'PAYHOLIDAY_M列の時間(例:08:45)の45を取得
dtb1.Rows(i)("PAYHOLIDAY_M") = left * 60 + right '分換算
Nex
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-07-11 23:06
dtb1.Rows(i)("PAYHOLIDAY_T")がDBNullかどうかチェックする。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-07-11 23:53
せっかく DataSet や DataRow を使用していながら勿体ないです。 私なら手書きで回避せず型付 DataSet を用意して、とあるプロパティの設定を変えて終了ですね。 ノンコーディングです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2007-07-12 07:44
NAL-6295です。

型付きじゃない場合は、DataRow.IsNull('項目名')で判定。
型付けの場合は、じゃんぬさんの言うとおり、とあるプロパティを設定して、そもそもDBNullを取得しないようにするか、DataRow.Is項目名Nullで判定。

ですね。
初心者
会議室デビュー日: 2007/07/11
投稿数: 2
投稿日時: 2007-07-12 10:39
3人の方、ご回答ありがとうございました。
If dtb1.Rows(i)("PAYHOLIDAY_T") Is DBNull.Value Then
dtb1.Rows(i)("PAYHOLIDAY_T") = "00:00"
End If
上記を追加することで、NULL回避できませんでした。

型付 DataSetの事は、よく分かりません。
また、ご教授頂ければ、幸いと存じます。

ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2007-07-12 11:00
やるなら、
コード:
If dtb1.Rows(i)("PAYHOLIDAY_T") Is DBNull.Value Then 
  dtb1.Rows(i)("PAYHOLIDAY_T") = "00:00" 
End If 


ではなく、
コード:
If dtb1.Rows(i)("PAYHOLIDAY_T") Is DBNull.Value Then 
  left = 0
  right = 0
Else
  left = Mid(dtb1.Rows(i)("PAYHOLIDAY_T"), 1, 2)
  right = Mid(dtb1.Rows(i)("PAYHOLIDAY_T"), 4, 2)
End If 


じゃないですか?

時間を文字列として扱うのはどうかと思ったりもしますが。
隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2007-07-18 10:56
すいません、削除しました。

[ メッセージ編集済み 編集者: 隣の古柴 編集日時 2007-07-18 11:25 ]
隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2007-07-18 11:30
お世話になっております。
やりとりの中で出てくる「型付DataSetのとあるプロパティ」というのは

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpref/html/frlrfsystemdatadatasetmemberstopic.asp

この中に含まれているものでしょうか?
後学のためにご教示頂ければ幸いです。

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