私は一方の側にAccessデータベースを持っています。ここで、Tbl_Application.id_connexion
はタイプのフィールドですGuid
(msAccessの用語では「レプリケーションID」と呼ばれます)。
このTbl_ApplicationテーブルからDataRow[]
配列を介していくつかのデータを収集していますdr_Tbl_Application
。次のコードは、最初のDataRowを読み取ります。
private Guid? mid_connexion = null;
mid_connexion = (Guid)dr_Tbl_Application[0]["id_connexion"]
Tbl_Application.id_connexion
値を保持している限り、すべてがOKです。このフィールドに値が含まれていない場合、次のエラーが発生します。
InvalidCastException was unhandled
そして、これらは私がすぐに見ることができるいくつかのものです:
? dr_Programme[0]["id_Connexion"]
{}
? dr_Programme[0]["id_Connexion"].GetType()
{Name = "DBNull" FullName = "System.DBNull"}
? dr_Programme[0]["id_Connexion"] is System.DBNull
true
したがって、例外を回避するために、データベースのフィールドからローカル変数に一意の識別子の値を転送する前にテストする方がよいと思います。そうは言っても、私はまだ自分の発見に悩まされているので、この問題をさらに深く掘り下げたいと思います。
私の質問は次のとおりです。
- テストせずに、データベースのGuid値からローカルのGuidオブジェクトに値を割り当てるための基本的なコードを作成する方法はあります
System.DBNull
か? - 元のフィールドが値を保持しているかどうかに応じて、同じオブジェクトに適用された同じ命令が異なる型を返す必要があるのはなぜですか?
質問2で編集:
? dr_Programme[0]["id_Connexion"].GetType()
対応するフィールドが元のテーブルに入力されている場合、System.Guidタイプを返します。
? dr_Programme[0]["id_Connexion"].GetType()
元のテーブルでフィールドがnull(または入力されていない)の場合、System.DBNullタイプを返します...