【问题标题】:WPF insert Bit Field into MySQL databaseWPF将位字段插入MySQL数据库
【发布时间】:2016-07-05 12:00:42
【问题描述】:

这应该很简单,我觉得问起来很愚蠢,但我不知道我做错了什么。尝试将 0 插入 MySQL 数据库中的 bit 字段,无论我做什么,它都会返回 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”,但这也不起作用。

【问题讨论】:

    标签: c# mysql wpf


    【解决方案1】:

    使用允许您指定参数的数据类型的 Add 方法的特定重载

    cmd.Parameters.Add("@varcharField", MySqlDbType.VarChar).Value = value.ToString();
    cmd.Parameters.Add("@bitField", MySqlDbType.Bit).Value = value;
    

    在您当前的代码中,对于您的第二个参数,您将一个字符串添加到参数中,而无需指定参数的数据类型。这将创建一个 VarChar 类型的参数,当该值到达数据库引擎时,将应用自动转换以取回预期的位。我想这个转换查看字符串“0”的ASCII码,这不是零。

    向数据库引擎提供数据时最好明确一点,以避免引擎根据自己的假设进行这些转换

    【讨论】:

      猜你喜欢
      • 2014-12-26
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多