MySQL Connector附加枚举值,其值小于实际值
我正在使用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
在数据库中插入FirstValue
。
数据库中的Col1
列是ENUM数据类型:
ENUM('FirstValue','SecondValue','ThirdValue')
如果我尝试追加MyEnum.FirstValue
我会收到数据截断错误( data truncated for column COLUMN_NAME
),因为它尝试使用与.NET相同的索引(在MyEnum.FirstValue
的情况下为MyEnum.FirstValue
),这是MySQL中的保留值枚举 (因为默认情况下它们从1
开始)。
解决方案是将+1
添加到所有枚举值或可能进行扩展:
cmd.Parameters.AddWithValue("@enumVal", MyEnum.SecondValue + 1);
我仍然觉得我必须手动将值修改为应该自动转换它的库。
我做错了什么,或者没有默认的方法来解决这个问题?
默认情况下,.NET枚举从零开始,并以整数作为后缀(即,您可以将默认枚举转换为整数并返回)。
我想现在发生的事情是MySQL数据库驱动程序将枚举值转换为整数,并尝试插入它。
MySQL将插入枚举列的整数视为基于1的索引。
我建议只使数据库列为整数而不是MySQL枚举。 这样,零是有效值。
或者,您可以将枚举的第一个值声明为整数值为1,以匹配MySQL,如下所示:
public enum MyEnum { FirstValue = 1, SecondValue, ThirdValue }
我认为我说的是SecondValue
和ThirdValue
将分别支持值2和3。
然后当连接器将枚举转换为整数时,它将返回1,2和3,这将与MySQL期望的匹配。
第三种方法是保持两端的类型为原样,只是让这个映射成为你的数据层的一个function(你有一个,对吗?) – 那么你只需要在一个地方处理这个问题。 介意可能对未来的开发者有点误导。
你可以像这样制作你的枚举
public enum MyEnum { FirstValue = 1, SecondValue, ThirdValue }
它将从1开始,而不是从0开始。
上述就是C#学习教程:MySQL Connector附加枚举值,其值小于实际值分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/955055.html