插入DateTime(从C#到MySQL)

时间:2014-10-09 02:56:45

标签: c# mysql datetime

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

    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");

还用“/”而不是“ - ” 这里有什么帮助吗?

3 个答案:

答案 0 :(得分:1)

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

问题在于SQL文本:

  + "', '1,'" +

该文字与下一列值之间需要有逗号。看起来你错过了一个单引号:

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

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

如果您希望列值为当前日期和时间,则不需要运行单独的查询来获取值。您只需在查询文本中引用函数NOW()即可。 e.g。

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

答案 1 :(得分:0)

你执行了两次

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

应该只有一次。

然后像@sgeddes said in the comments一样使用参数化查询,它们可以避免错误和SQL注入。

答案 2 :(得分:0)

您使用的方法不是编写SQL命令的最佳方法。您应该在Query中使用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;