【问题标题】:C# MYSQL - I can't insert a boolean valueC# MYSQL - 我无法插入布尔值
【发布时间】:2013-05-17 14:05:13
【问题描述】:
    private void button1_Click(object sender, EventArgs e)
    {
        // Início da Conexão com indicação de qual o servidor, nome de base de dados e utilizar

        /* É aconselhável criar um utilizador com password. Para acrescentar a password é somente
        necessário acrescentar o seguinte código a seguir ao uid=root;password=xxxxx*/

        mConn = new MySqlConnection("Persist Security Info=False; server=localhost;database=FichasReparacao;uid=root");

        // Abre a conexão
        mConn.Open();

        //Query SQL
        MySqlCommand command = new MySqlCommand("INSERT INTO Cliente (nome, email, telefone, blacklist)" +
        "VALUES('" + nome_cli.Text + "','" + email_cli.Text + "','" + telefone_cli.Text + "','" + false + "')", mConn);

        //Executa a Query SQL
        command.ExecuteNonQuery();

        // Fecha a conexão
        mConn.Close();

        //Mensagem de Sucesso
        MessageBox.Show("Gravado com Sucesso!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }

这是完整的按钮代码,我没有收到任何错误消息.. 我尝试使用具有 false/true 值的变量,但没有,我总是得到 0 值。

【问题讨论】:

  • 您有任何错误信息或异常吗?显示您的完整代码。另外,请注意 SQL 注入。始终使用参数化查询。
  • 更改您的插入查询以使用参数,而不是为初学者设置潜在的 SQL 注入。如果可能,请提供架构和/或表定义,让我们知道该字段的实际数据类型是什么
  • 不,没有收到任何错误信息。
  • 你有'假'(引用)。它是一个 SQL 关键字,然后它不需要引号。附录:另外也遵循DJ KRAZE的建议,不要构建sql命令而是使用参数(特别是为了避免sql注入)。
  • 阿德里亚诺,除非我是盲人,否则他没有错误引用..

标签: c# mysql


【解决方案1】:

使用参数化查询

MySqlCommand command = new MySqlCommand("INSERT INTO Cliente " + 
                      "(nome, email, telefone, blacklist)" + 
                      "VALUES(@nome, @email, @tel, @bl)";
command.Parameters.AddWithValue("@nome",nome_cli.Text);
command.Parameters.AddWithValue("@email", email_cli.Text);
command.Parameters.AddWithValue("@tel", telefone_cli.Text);
command.Parameters.AddWithValue("@bl", 0);
command.ExecuteNonQuery();

通过这种方式,网络框架和 MySql 的 ADO.NET 提供程序以正确的方式将您的值传递给数据库引擎。例如,如果您的一个输入文本包含单引号,您的代码将因语法错误而失败。而且,如果您有恶意用户,您将面临Sql Injection 的风险

【讨论】:

    【解决方案2】:

    MySQL不存储真假,BOOLEAN后面的数据类型是TinyInt(1)

    Bool, Boolean: These types are synonyms for TINYINT(1). A value of zero is considered false. Non-zero values are considered true.
    

    我建议通过 0

    【讨论】:

      猜你喜欢
      • 2011-11-01
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      相关资源
      最近更新 更多