Re: how to parse an Enum Structure in vb.net

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance



giannik wrote:
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.

Use a String column in the database and use <value>.ToString() to get the enum "name" to save.

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.
.



Relevant Pages

  • Re: how to parse an Enum Structure in vb.net
    ... Public Enum MyEnum ... I save in an access database this enum value as an integer (0=EnumVal1, ... Does this populate the property with MyObject.MyEnum= EnumVal2 ...
    (microsoft.public.dotnet.languages.vb)
  • how to parse an Enum Structure in vb.net
    ... I have an Enum Structure ... Public Enum MyEnum ... I save in an access database this enum value as an integer (0=EnumVal1, ... When retreving this enum from the database how do I ensure that the correct ...
    (microsoft.public.dotnet.languages.vb)
  • Re: how to parse an Enum Structure in vb.net
    ... Public Enum MyEnum ... I save in an access database this enum value as an integer (0=EnumVal1, ...
    (microsoft.public.dotnet.languages.vb)
  • Re: how to parse an Enum Structure in vb.net
    ... Public Enum MyEnum ... I save in an access database this enum value as an integer (0=EnumVal1, ... Dim e As MyEnum = CType ...
    (microsoft.public.dotnet.languages.vb)
  • Re: how to parse an Enum Structure in vb.net
    ... You can just as easily assign numbers to each enum value, i.e., ... I save in an access database this enum value as an integer (0=EnumVal1, ... parse the string value ... Class MyClass ...
    (microsoft.public.dotnet.languages.vb)