MySQL Connector for .NET を使用して、 C# から MySQL データベースを管理しています。
列挙型をデータベースに挿入しようとすると、列挙型に実際の値より 1 小さい値が追加されます。
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')
追加しようとすると、.NET と同じインデックス (の場合)を使用しようとするMyEnum.FirstValue
ため、データ切り捨てエラー ( )が発生します。data truncated for column COLUMN_NAME
0
MyEnum.FirstValue
1
解決策は、すべての列挙値に追加+1
するか、場合によっては拡張を行うことです。
cmd.Parameters.AddWithValue("@enumVal", MyEnum.SecondValue + 1);
値を手動で変更し、自動的に変換するはずのライブラリに変更する必要があることは、私にはまだ間違っていると感じています。
私は何か間違ったことをしていますか、またはこれに対処するデフォルトの方法はありませんか?