插入 DateTime(从 C# 到 MySQL)

Posted

技术标签:

【中文标题】插入 DateTime(从 C# 到 MySQL)【英文标题】:Insert into DateTime (from C# to 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");

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

【问题讨论】:

在继续之前,请使用参数化查询:***.com/questions/652978/… 【参考方案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 注入。

【讨论】:

以上是关于插入 DateTime(从 C# 到 MySQL)的主要内容,如果未能解决你的问题,请参考以下文章

如何从 MySql 数据库中获取日期到 C# DateTime 对象?

c# 怎么向mysql 插入时间datetime

从 C# 到 MySQL 的 DateTime:不完整的存储

如何使用 Node.js 从 Angular 将日期插入 MySQL DATETIME 列?

如何在 C# 中使用 mysql xdevapi 设置 DateTime

MySQL 是不是会自动重新格式化插入到 DATETIME 类型列中的日期?