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

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

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

Re[1]: DBNullは、どのよう場合に


(過去ログ 164 を表示中)

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

■94855 / inTopicNo.1)  DBNullは、どのよう場合に
  
□投稿者/ 困った人 (2回)-(2020/05/27(Wed) 00:52:04)

分類:[VB.NET/VB2005 以降] 

Visual Basic2010 でソフトを組んでまして
Microsof AccessのDB機能を使用してで結果を保存したり表示したりしています。

そのなかで文字列でDBNullでエラーが発生しました。
dbnull' から型 'string' への変換は無効です。

これは、IsDBNullでは、例外が発生してtry catch ex Exceptionでしか
対応できない状況です。

String文字列にどのような文字が入った場合にDBNullが発生しますでしょうか?



引用返信 編集キー/
■94856 / inTopicNo.2)  Re[1]: DBNullは、どのよう場合に
□投稿者/ Hongliang (1037回)-(2020/05/27(Wed) 01:00:36)
その例外が出ている部分のコードをお書きください。

> String文字列にどのような文字が入った場合にDBNullが発生しますでしょうか?
DBのテーブルにNULLがあった時、DBNull型のオブジェクトになります。
なので、String変数に受け取る前にDBNullかどうかをチェックする必要があります。
どうチェックするかは、どうやってDBからデータを取得しているかによります。
引用返信 編集キー/
■94857 / inTopicNo.3)  Re[1]: DBNullは、どのよう場合に
□投稿者/ 魔界の仮面弁士 (2727回)-(2020/05/27(Wed) 09:39:20)
No94855 (困った人 さん) に返信
> そのなかで文字列でDBNullでエラーが発生しました。
文字列へ DBNull から変換している、ということでしょうか。

> dbnull' から型 'string' への変換は無効です。
「型 'DBNull' から型 'String' への変換は無効です。」の InvalidCastException ですね。
Option Strict が Off の状態で開発されていませんか?


> これは、IsDBNullでは、例外が発生してtry catch ex Exceptionでしか
IsDBNull 関数 … Microsoft.VisualBasic.Information.IsDBNull
Convert.IsDBNull メソッド … System.Convert.IsDBNull

を呼び出した時点で例外になってしまい、その例外の内容が InvalidCastException である、と。

だとすれば、これらが「String への変換」を行うはずはないので、
質問内容にまだ記載されていない部分に問題があるのだと推察します。


'
' VB の IsDBNull 関数が行う処理
'
If Object型引数 Is Nothing Then Return False
Return TypeOf Object型引数 Is System.DBNull


'
' Convert.IsDBNull メソッドが行う処理
' https://referencesource.microsoft.com/#mscorlib/system/convert.cs,9bac5ae18d21a70a
'
If Object型引数 Is System.DBNull.Value Then Return True
Dim convertible = TryCast(Object型引数, System.IConvertible)
Retrun If(convertible Is Nothing, False, convertible.GetTypeCode() = System.TypeCode.DBNull)



> Visual Basic2010 でソフトを組んでまして
> Microsof AccessのDB機能を使用してで結果を保存したり表示したりしています。
随分と古いバージョンを使い続けておられますね。
Access データへのアクセス手段は何を使われていますか?

(1) Microsoft DAO 3.6 Object Library
(2) Microsoft ActiveX Data Objects Library (2.0〜6.1)
(3) Microsoft ActiveX Data Objects Recordsets Library (2.8 / 6.1)
(4) ADO.NET / System.Data.OldDb 名前空間
(5) ADO.NET / System.Data.Odbc 名前空間
(6) 上記以外 (ODBC, RDO, …)

上記(2)〜(4) の場合は、使用している OLE DB Provider も教えてください。
 Microsoft JET OLEDB 3.51 Provider
 Microsoft JET OLEDB 4.0 Provider
 Microsoft ACE OLEDB 12.0 Provider
など。
引用返信 編集キー/
■94864 / inTopicNo.4)  Re[1]: DBNullは、どのよう場合に
□投稿者/ WebSurfer (2064回)-(2020/05/28(Thu) 10:39:52)
No94855 (困った人 さん) に返信

> String文字列にどのような文字が入った場合にDBNullが発生しますでしょうか?

何を作っているのか分かりませんが、例えば

(1) Visual Studio のデータソース構成ウィザードを使って型付 DataSet / DataTable +
  TableApapter の生成すると、 null が渡された場合は生成されたコードの中で
  DBNull.Value に変換される。

(2) 空の文字列値 ("") を DBNull.Value 値に自動的に変換して代入する ASP.NET Web
  Forms のサーバーコントロールがある。

・・・などがあります。

今回の質問者さんの問題がそのあたりの影響かどうかは分かりませんが、自分でコーディ
ングしたわけでもないのに知らないところで勝手に(?)変換されることもあるのは覚え
ておいた方がよさそうです。

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -