【问题标题】:Insert into DateTime (from C# to MySQL)插入 DateTime(从 C# 到 MySQL)
【发布时间】:2014-12-03 20:39:54
【问题描述】:

我一直有这个错误: 您的 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”是日期时间列)

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

也用“/”代替“-” 这里有什么帮助吗?

【问题讨论】:

标签: c# mysql datetime


【解决方案1】:

您使用的方法并不是编写 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;

【讨论】:

  • 我不认为SqlCommandsMySql 工作。至少在我的经验中没有。
【解决方案2】:

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

问题出在此处的 SQL 文本中:

  + "', '1,'" +

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

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

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

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

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

【讨论】:

    【解决方案3】:

    你执行了两次

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

    应该只有一次。

    然后像@sgeddes said in the comments 使用参数化查询,它们避免了错误和sql 注入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 2017-05-12
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 2018-05-10
      相关资源
      最近更新 更多