繁体   English   中英

插入DateTime(从C#到MySQL)

[英]Insert into DateTime (from C# to MySQL)

我只是一直遇到这个错误: 您的SQL语法有错误; 在第1行的“ 2014-10-08 19:39:57)”附近查看与您的MySQL服务器版本相对应的手册以使用正确的语法

    public string ObtenerFechaHora()
    {
        string query = "select CURRENT_TIMESTAMP() as Fecha";
        OpenConnection();
        MySqlCommand cmd = new MySqlCommand(query, connection);

        cmd.ExecuteNonQuery();
        DateTime e = (DateTime)cmd.ExecuteScalar();

        CloseConnection();
        return e.ToString("yyyy-MM-dd H:mm:ss");
    }

然后我插入(“ Fecha”是DateTime列)

    string query = "INSERT INTO actividad (idTerminal, Proceso, Nombre, Tiempo, Fecha) VALUES('" + idTerminal + "', '" + Proceso + "', '" + Nombre + "', '1,'" + this.ObtenerFechaHora() + ")";

我曾经使用过很多格式,但经常出错,例如:

    e.ToString("yyyy-MM-dd H:mm:ss");
    e.ToString("yyyy-MM-dd HH:mm:ss");
    e.ToString("dd-MM-yyyy H:mm:ss");
    e.ToString("yyyy-dd-MMH:mm:ss");

还可以用“ /”代替“-”,这有什么帮助吗?

问题不在于日期时间字符串的格式。 问题出在插入值之前的INSERT语句的SQL文本中。 为了进行调试,您可以输出查询字符串并进行检查。

问题出在以下SQL文本中:

  + "', '1,'" +

该文字和下一个列值之间必须有一个逗号。 您好像错过了一个引号:

  + "', '1','" +
          ^

一个潜在的更大问题是您的代码似乎容易受到SQL注入的攻击。 考虑一下当您要包含在SQL文本中的变量之一包含单引号或什至是nefarios或Little Bobby Tables时会发生什么。 http://xkcd.com/327/

如果希望将列值作为当前日期和时间,则无需运行单独的查询来获取该值。 您可以简单地在查询文本中引用函数NOW() 例如

  + "', '1', NOW() )";

你两次谴责

//cmd.ExecuteNonQuery();
DateTime e = (DateTime)cmd.ExecuteScalar();

应该只有一次。

然后就像@sgeddes 在注释中说的那样使用参数化查询,这样可以避免错误和sql注入。

您使用的方法不是编写SQL命令的最佳方法。 您应该在查询中使用sql参数。 您的代码容易受到SQL Injected的攻击,显然这不是最佳方法。

尝试使用如下所示的内容:

string commandText = "UPDATE Sales.Store SET Demographics = @demographics "
    + "WHERE CustomerID = @ID;";
SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM