【发布时间】:2012-11-11 21:03:36
【问题描述】:
我正在使用 .NET 的 MySQL Connector 从 C# 管理 MySQL 数据库。
当我尝试将枚举插入数据库时,它会在枚举中附加值比实际值小一。
public enum MyEnum {
FirstValue, SecondValue, ThirdValue;
}
public void InsertEnum() {
MySqlConnection con = new MySqlConnection(connStr);
string sql = "INSERT INTO table (Col1) VALUES (@enumVal);";
MySqlCommand cmd = new MySqlCommand(sql, con);
cmd.Parameters.AddWithValue("@enumVal", MyEnum.SecondValue);
//Note I'm trying to insert 'SecondValue' --^
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
这会在数据库中插入FirstValue。
数据库中的Col1 列是ENUM 数据类型:
ENUM('FirstValue','SecondValue','ThirdValue')
如果我尝试追加 MyEnum.FirstValue,我会收到数据截断错误 (data truncated for column COLUMN_NAME),因为它尝试使用与 .NET 相同的索引(0,在 MyEnum.FirstValue 的情况下,这是保留的MySQL Enums 中的值(因为它们默认从 1 开始)。
解决方案是将+1 附加到所有枚举值或可能进行扩展:
cmd.Parameters.AddWithValue("@enumVal", MyEnum.SecondValue + 1);
我仍然觉得我必须手动将值修改为应该自动转换它的库。
是我做错了什么,还是没有默认的方法来处理这个问题?
【问题讨论】:
-
表中col1的数据类型是什么?
-
你确定你的枚举和你给出的完全一样,并且你没有在枚举声明中使用特定的 int 值吗?
-
@MilindThakkar
ENUM('FirstValue','SecondValue','ThirdValue') -
@nawfal,你问我是否写过例如
FirstValue = -1等等?在那种情况下,不,我没有。
标签: c# .net mysql mysql-connector