这应该很简单,我觉得愚蠢,但我无法弄清楚我做错了什么。试图在MySQL数据库中的bit
字段中插入一个0并且无论我做什么都会返回1.因此在查询程序中这很有效:
insert into MyTable (VarcharField, BitField) values ('0', 0)
返回
的结果VarcharField: 1
BitField: 1
现在转到我的WPF应用程序。请注意,这是我的通用插入方法的简化版本,它适用于除bit
之外的所有其他字段类型:
string sqlCMD = "insert into MyTable (VarcharField, BitField) values (@varcharField, @bitField)";
int value = 0;
using (MySqlConnection con = new MySqlConnection(ConString))
{
MySqlCommand cmd = new MySqlCommand();
con.Open();
cmd = new MySqlCommand(sqlCMD, con);
cmd.Parameters.Add(new MySqlParameter("@varcharField", value.ToString()));
cmd.Parameters.Add(new MySqlParameter("@bitField", value.ToString()));
cmd.ExecuteNonQuery();
con.Close();
cmd.Dispose();
con.Close();
}
返回
的结果VarcharField: 0
BitField: 1
我甚至尝试将参数值设置为" false"这也不起作用。
答案 0 :(得分:1)
使用Add方法的特定重载,该方法允许您指定参数的数据类型
cmd.Parameters.Add("@varcharField", MySqlDbType.VarChar).Value = value.ToString();
cmd.Parameters.Add("@bitField", MySqlDbType.Bit).Value = value;
在当前代码中,对于第二个参数,在参数中添加字符串而不指定参数的数据类型。这将创建一个VarChar类型的参数,当值到达数据库引擎时,将应用自动转换以返回预期位。我想这个转换会查看字符串“0”的ascii代码,而这不是零。
当您向数据库引擎提供数据以避免引擎根据自己的假设进行的转换时,最好是明确的