giannik said:
I have an Enum
Public Enum MyEnum
EnumVal1=0
EnumVal2=1
EnumVal2=2
end enum
I save in an access database this enum value as an integer (0=EnumVal1,
1=EnumVal2, 2=EnumVal)
Save the Enum /names/ not their numeric values.
OK, you only have three here, but what if you had a long list of these
and then, Lord forbid, you added another one "in the middle"? Much of
your existing data (in Access) would be wrong.
When retreving this enum from the database how do I ensure that the correct
value is passed to my object
When reading the property back, parse the string value (from Access)
back into the Enum Type, as in
MyObject.MyEnum = CType( dr.Item( "EV" ), MyEnum )
By way of a rather silly example:
Class MyClass
Enum Month
January = 1
February
March
. . .
dr.Item( "Month" ) = Month.December.ToString() ' actually "December"
Now, just for the sake of argument, let's create a new month, called
Filibuster, between February and March.
Class MyClass
Enum Month
January = 1
February
Filibuster
March
. . .
Oh No! I hear you cry. You'll have to bulk update all the records in
Access to increment their month numbers!
Nope. Holding the Enum /names/ means you don't have to. Assuming you
already have a row in there for December:
? dr.Item( "Month" ).GetType().ToString()
[System.]String
? dr.Item( "Month" ).ToString()
"December"
? CType( dr.Item( "Month" ), Month ).GetType().ToString()
[MyClass.]Month
? CType( dr.Item( "Month" ), Month )
December
So far, so good, but here's the clincher ...
? CInt( dr.Item( "Month" ), Month )
13
.... even if it was 12 when you saved that record into Access!
HTH,
Phill W.