J'ai vu Ce fil sur le débordement de la pile En ce qui concerne la conversion entre les types dbnull et nullables, mais je suis toujours confus. J'ai écrit du code comme celui-ci avec un code de piratage pour traiter des types nullables pour DateTime et Ints que je vais montrer ci-dessous, mais je veux utiliser des types nullables: ron est Maintenant défini comme suit: P> RON_ID NOT NULL VARCHAR2(40)
STAFF_NUM NOT NULL VARCHAR2(12)
CHECKIN_DATE NOT NULL DATE
NONMISSION_IND NOT NULL VARCHAR2(1)
COMMENTS VARCHAR2(4000)
NONCOMPLY_IND VARCHAR2(4000)
PROPERTY_ID NOT NULL NUMBER(38)
PROPERTY_CHAIN VARCHAR2(2)
PROPERTY_NAME VARCHAR2(255)
RON_AIRPORT NOT NULL VARCHAR2(3)
PROPERTY_STREET VARCHAR2(255)
PROPERTY_STREET2 VARCHAR2(255)
PROPERTY_CITY VARCHAR2(255)
PROPERTY_STATE VARCHAR2(3)
PROPERTY_POSTALCODE VARCHAR2(255)
PROPERTY_PHONE VARCHAR2(20)
PROPERTY_FAX VARCHAR2(20)
PROPERTY_COUNTRY VARCHAR2(2)
PROPERTY_LONGITUDE NUMBER
PROPERTY_LATITUDE NUMBER
PROPERTY_AIRPORT VARCHAR2(3)
REPORTED_BY VARCHAR2(50)
REPORTED_DTS NOT NULL DATE
CANCELED_BY VARCHAR2(50)
CANCELED_DTS DATE
4 Réponses :
Pour définir un type de valeur (telle que DateTime) comme nullable ... Effectuez l'une des opérations suivantes:
select new RON { RONId = dr.Field<string>("RON_ID"), // snip... CheckInDate = dr.Field<DateTime?>("CHECKIN_DATE"), // snip... };
Merci! Alors datetime? nullabledate = datarow.field
J'ai eu une "distribution spécifiée n'est pas valide."} [System.invalidcastexception]: {"Cast spécifié n'est pas valide."} Données: {System.Collections.ListDictionaryinernal} helplink: NULL INNEREXCEPECTION: NULL Message: "Cast non spécifié n'est pas valide." Source: "System.Data.DataSetTextensions" StackTrace: "at system.data.datarsexsions.unboxt`1.Nullablefield [telem] (valeur d'objet) \ r \ n au système.data.datarowexsions.field [t] (da
... Lorsque vous essayez de faire checkindate = dr.field
Eh bien ... Regardez plus près de votre exemple le schéma indique que Checkin_Date est défini comme non NULL. Pas besoin de changer celui-ci à un nullable car il ne peut jamais être nul dans la base de données.
Donc annulé_dts est le seul champ que je dois m'inquiéter selon cela
Comme seuls les types de valeur peuvent être effectués nullable code>, vous n'aurez rien à faire de spécial pour les chaînes. Les types primitifs (et
DateTime code>) peuvent être déclarés nullables en ajoutant un point d'interrogation après leur nom de type, comme
int? Nullablenumber {obtenir; ensemble; } code>. p>
Merci, c'est ce que je pensais
Vous devrez peut-être comparer contre DBNULL avant d'attribuer une DateTime ou NULL
myNullableDate = (DBNull.Value == list.Field<object>("FOO")) ? null : (DateTime?)list.Field<DateTime?>("FOO");
PS: p> DATABLE DT = DS.Tables [0];
LISTE