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

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

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

Re[3]: Date型のNullを取得する方法


(過去ログ 103 を表示中)

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

■61645 / inTopicNo.1)  Date型のNullを取得する方法
  
□投稿者/ SQL-Server初心者 (1回)-(2011/08/25(Thu) 10:23:17)

分類:[ASP.NET (VB)] 

SQL-Server2008を使っています。
日付がDate型でNullをASP.NET(VB.NET)側で取得しようとしますが、
「Null 許容のオブジェクトには値を指定しなければなりません。」と言うエラーが帰ってきます
Object型をセットすると
「指定されたキャストは有効ではありません。」と言うエラーが帰ってきます

ASP.NET(VB.NET)側で日付型でNullを取得する方法があれば御教授して頂けないでしょうか?
よろしくお願いします。
引用返信 編集キー/
■61646 / inTopicNo.2)  Re[1]: Date型のNullを取得する方法
□投稿者/ shu (955回)-(2011/08/25(Thu) 10:31:22)
No61645 (SQL-Server初心者 さん) に返信

IsNull(or IsDBNull)でチェックしてNothingをセットする
引用返信 編集キー/
■61648 / inTopicNo.3)  Re[1]: Date型のNullを取得する方法
□投稿者/ 魔界の仮面弁士 (2328回)-(2011/08/25(Thu) 10:54:41)
No61645 (SQL-Server初心者 さん) に返信
> エラーが帰ってきます
「帰」→「返」な気もしますが、それはさておき。

> 日付がDate型で
ここでいう Date 型は、VB.NET の Date 型のことでしょうか?
それとも、SQL Server の DATE型やDATETIME型のことでしょうか?

> NullをASP.NET(VB.NET)側で取得しようとしますが、
DataAdapter 等を使う場合は、戻り値が Object になりますが、この場合DB 側の NULL 値は、
.NET 側には DBNull 型のオブジェクトとして渡される事になります。

DBNull 値の判定が必要なら、「If IsDBNull(…) Then」のように記述できます。

また、型付DataSet で受け取っている場合には、.列名 プロパティとは別に、
.Is列名Null メソッドが用意されますので、これによって NULL 判定が可能です。


> 「Null 許容のオブジェクトには値を指定しなければなりません。」と言うエラーが帰ってきます
現状のコードを提示していただいていないので、憶測にはなりますが、
上記は、Null許容型の取り扱いを間違えている時のエラーに見えます。

たとえば、
 Dim dt As Nullable(Of Date)
または
 Dim dt As Date?
という型の値があったとします。

この場合、たとえば「If dt.Value < Now Then」という比較を行ったり、
あるいは「Dim x As Date = CDate(dt)」といった操作を行おうとすると、
dt が Nothing だった場合に
 『Null 許容のオブジェクトには値を指定しなければなりません。』
というエラーを生じさせることになります。

この場合は、Null かどうかも判定する必要があるため、
「If dt.HasValue AndAlso dt.Value < Now Then」
「If dt IsNot Nothing AndAlso dt.Value < Now Then」
「Dim x As Date = If(dt, Nothing)」
などといった対処が必要です。


> Object型をセットすると
変換するのではなく、セットするということは、
 x = New Object()
のようなことですか?

> 「指定されたキャストは有効ではありません。」と言うエラーが帰ってきます
Object 型へのキャストが失敗する事は稀だと思いますが、どういうコードを用いて、
何型のオブジェクトを何型にキャストしようとしたのでしょうか?


> 御教授して頂けないでしょうか?
http://www.tt.rim.or.jp/~rudyard/torii009.html
引用返信 編集キー/
■61650 / inTopicNo.4)  Re[2]: Date型のNullを取得する方法
□投稿者/ SQL-Server初心者 (2回)-(2011/08/25(Thu) 11:19:08)
No61646 (shu さん) に返信
> ■No61645 (SQL-Server初心者 さん) に返信
>
> IsNull(or IsDBNull)でチェックしてNothingをセットする

教えてもらっている身分で申し訳ございませんが、VB.NETでIsNullは使えないのでは・・・・
色々試してみましたが、エラーの波線が出ます。

また、使い方も良く分かりません

Dim dat As Date
if IsNull(or IsDBNull(date)) then
str = Nothing
End If

でよろしいのでしょうか?


重ね重ねよろしくお願いします

引用返信 編集キー/
■61651 / inTopicNo.5)  Re[3]: Date型のNullを取得する方法
□投稿者/ shu (956回)-(2011/08/25(Thu) 11:34:12)
No61650 (SQL-Server初心者 さん) に返信

>>IsNull(or IsDBNull)でチェックしてNothingをセットする
>
> 教えてもらっている身分で申し訳ございませんが、VB.NETでIsNullは使えないのでは・・・・
> 色々試してみましたが、エラーの波線が出ます。
>
> また、使い方も良く分かりません
SQL-Server初心者が提示されている内容が少ないのでどこのなんという型のオブジェクトから
読み込むのか不明なのでこう書きました。

>
> Dim dat As Date
> if IsNull(or IsDBNull(date)) then
> str = Nothing
> End If
>
> でよろしいのでしょうか?
Date型はNullにはならないのでメモリ内の話ならIsNullもIsDBNullも関係ないのでこの書き方は駄目です。

IsDBNullはDBNull.Valueの値になる可能性があるObjectに対し使います。
使用方法は
IsDBNull(Object)という方法とDbDatareader.IsDBNull(項目)
という方法があります。


話がかみ合ってないといけないので記述されたコードの該当部分を提示されることを薦めます。

IsNullはDataRowに対して使います。
DataRow.IsNull(項目)


引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -