我正在使用MySQL Connector for .NET 从 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 枚举中的保留值(因为它们1
默认启动)。
一种解决方案是附加+1
到所有枚举值或可能进行扩展:
cmd.Parameters.AddWithValue("@enumVal", MyEnum.SecondValue + 1);
我仍然觉得我必须手动将值修改为应该自动转换它的库。
我做错了什么,还是没有默认的方法来处理这个?