代码之家  ›  专栏  ›  技术社区  ›  Dave

使用C将数据插入数据库时出错#

  •  1
  • Dave  · 技术社区  · 7 年前

    当我尝试在数据库中插入一行时,出现以下错误: Error

    代码如下:

    try
    {
        DateTime date = new DateTime(2018, 02, 15, 07, 06, 00);
    
        using (OdbcConnection con = new OdbcConnection(Properties.Settings.Default.ConnectionString))
        {
            OdbcCommand cmd = new OdbcCommand("INSERT INTO Kassatickets (id, datum, korting, totaal) VALUES 3, '2018-02-15 07:06:00', " + kt.KortingId + ", " + kt.Totaal, con);                 
    
            con.Open();
            if (cmd.ExecuteNonQuery() == 0)
            {
                throw new Exception("Er zijn geen wijzigingen uitgevoerd!!");
            }
        }
    }
    catch (Exception e)
    {
        throw e;
    }
    

    首先,我认为问题是日期的格式,但当我通过phpmyadmin将这一行直接插入数据库时,就没有问题了。

    也许这很容易解决,但我找不到问题。。。

    1 回复  |  直到 7 年前
        1
  •  1
  •   FaizanHussainRabbani    7 年前

    强调参数化查询:

    方法1:

    using (OdbcConnection con = new OdbcConnection(Properties.Settings.Default.ConnectionString))
    {
        var query ="INSERT INTO Kassatickets (id, datum, korting, totaal) VALUES (?, ?, ?, ?)";     
    
        OdbcCommand cmd = new OdbcCommand(query, con);
    
        cmd.Parameters.Add("id", OdbcType.UniqueIdentifier).Value = 3;
        cmd.Parameters.Add("datum", OdbcType.VarChar).Value = "2018-02-15 07:06:00";
        cmd.Parameters.Add("korting", OdbcType.VarChar).Value = kt.KortingId;
        cmd.Parameters.Add("totaal", OdbcType.VarChar).Value = kt.Totaal;
        con.Open();
        if (cmd.ExecuteNonQuery() == 0)
        {
            throw new Exception("Er zijn geen wijzigingen uitgevoerd!!");
        }
    }
    

    方法2:

    using (OdbcConnection con = new OdbcConnection(Properties.Settings.Default.ConnectionString))
    {
        var query = "INSERT INTO Kassatickets (id, datum, korting, totaal) VALUES (@id, @datum, @korting, @totaal)";
    
        OdbcCommand cmd = new OdbcCommand(query, con);
        cmd.Parameters.AddWithValue("@id", 3);
        cmd.Parameters.AddWithValue("@datum", "2018-02-15 07:06:00");
        cmd.Parameters.AddWithValue("@korting", kt.KortingId);
        cmd.Parameters.AddWithValue("@totaal", kt.Totaal);
        con.Open();
        if (cmd.ExecuteNonQuery() == 0)
        {
            throw new Exception("Er zijn geen wijzigingen uitgevoerd!!");
        }
    }