- - PR -
DBNullのdatetime型のデータを取得する場合
1
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-02-27 14:35
いつも参考にさせていただいております。
VB SQL-SEVER2003 VS.NET2005 で開発しているのですが xsdのクエリ結果にNullが存在する場合、データアダプタでFillした 型付データセットのデータテーブルのカラムを取得しようとすると 例外「System.InvalidCastException: 指定されたキャストは有効ではありません。」で落ちてしまいます。 データテーブルの値を取得 -------------------------------------- Dim ta As New MST_SYSTEM_DataSetTableAdapters.MST_SYSTEMTableAdapter Dim ads As New MST_SYSTEM_DataSet ta.Fill(ads.MST_SYSTEM) Label1.Text = ads.MST_SYSTEM(0).DEL_DATE.ToString() -------------------------------------- ※テーブル[MST_SYSTEM]の[DEL_DATE]はdatetime型です。 自動生成された型付データセットです -------------------------------------- public System.DateTime DEL_DATE { get { try { return ((System.DateTime)(this[this.tableMST_SYSTEM.DEL_DATEColumn])); } catch (System.InvalidCastException e) { throw new System.Data.StrongTypingException("テーブル \\'MST_SYSTEM\\' にある列 \\'DEL_DATE\\' の値は DBNull です。", e); } } set { this[this.tableMST_SYSTEM.DEL_DATEColumn] = value; } } -------------------------------------- 日付の初期値で設定してあるDBNullをキャストしようとして落ちているようなのですが IsDBNull(ads.MST_SYSTEM(0).DEL_DATE) で判断しDBNullの場合は別処理にしようともしましたが ads.MST_SYSTEM(0).DEL_DATE この部分を使用すると同じように落ちてしまうようです。 何か対処方法はありませんでしょうか? よろしくご教授のほどよろしくお願いします。 | ||||||||||||||||||||
|
投稿日時: 2007-02-27 19:49
IsDEL_DATENull ってのが出来ていませんか?
あと、DataSetデザイナでヌルの時の値を設定できたと思う。 _________________ | ||||||||||||||||||||
|
投稿日時: 2007-02-27 22:33
ここの部分を見てください。
System.DateTime 型にキャストしてますよね。 DBNull は DateTime 型にキャストできないため、例外が発生してしまいます。 回避するには Jitta さんの仰るとおり
で出来ると思います。 型付けされているデータセットですので、 IsXXXXNull を使用したほうがいいのですが、一応 IsDBNull でも次のようにしたりすると判定できます。
Item を使用すると Object として扱うことができます。
NullValue プロパティのことですね。 | ||||||||||||||||||||
|
投稿日時: 2007-02-28 10:01
みなさんご教授ありがとうございました。
上記の2通りとも確認できました。 IsXXXXNullのほうでチェックを行ってから使用することにしたいと思います。 Jittaさんの言われるDataSetデザイナでヌルの時の値を設定と言われるものですが datetime型だと(Null)や(Enmpty)は設定できず(Throw exception)しか設定できないようです。 string型等はこちらでも対応なのは過去ログで確認しましたが datetime型は過去ログのほうはなかったようなので質問した次第です。 大変役に立ちました。 みなさんご返答ありがとうございました。 |
1