我一方面有一个 Access 数据库,其中Tbl_Application.id_connexion
有一个Guid
类型的字段(在 ms Access 术语中称为“复制 ID”)。
我正在通过一个DataRow[]
数组从这个 Tbl_Application 表中收集一些数据,dr_Tbl_Application
. 以下代码读取第一个 DataRow:
private Guid? mid_connexion = null;
mid_connexion = (Guid)dr_Tbl_Application[0]["id_connexion"]
只要Tbl_Application.id_connexion
保持价值,一切都很好。如果此字段不包含值,我将收到以下错误:
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()
当原始表中的字段为空(或未填充)时,返回 System.DBNull 类型...