c#中奇怪的枚举问题

时间:2010-12-27 11:39:40

标签: c# asp.net

我有这个枚举:

public enum SupportedISOCurrencySymbol { DKK = 208, EUR = 978, NOK = 578, SEK = 752 }

我在approved_orders表的Currency字段中保存订单的值。

我使用如下参数填充sql insert查询:

cmd.Parameters.AddWithValue("?Currency",                        this.Currency);

好吧,如果我在上面的行上进行调试,我清楚地看到this.Currency的值 DKK

为什么它会在数据库中插入: 208

你有什么想法吗?

感谢。

3 个答案:

答案 0 :(得分:3)

SupportedISOCurrencySymbol是enum,以整数为基数。 “DKK”代表数字208。

您在调试窗口中看到的是您的枚举上的.ToString()的值,它被定义为返回枚举的名称,而不是值。如果您希望将字符串“DKK”发送到您的数据库,您可以简单地明确说明:

cmd.Parameters.AddWithValue("?Currency", this.Currency.ToString());

当然,数据库中涉及的列需要是兼容的文本类型。

答案 1 :(得分:2)

“DKK”是您(作为程序员)在代码中使用值“208”的友好名称。

编译代码时,所有出现的“DKK”都替换为“208”,其中包括将值插入数据库的代码。

您可以更改数据库架构以保存字符串而不是整数并存储枚举的名称而不是它的值 - 但是在读取时需要将字符串解析为枚举从数据库中退回到你的代码中。

答案 2 :(得分:0)

你需要添加一个this.Currency.ToString()吗?以便使文本不是枚举的数值?