【问题标题】:How to convert C# DateTime to MySQL timestamp table column如何将 C# DateTime 转换为 MySQL 时间戳表列
【发布时间】:2014-12-25 14:05:41
【问题描述】:

我正在尝试使用当前时间(原始值为 NULL)更新名为 dtprint 的时间戳类型的表元素。我使用的代码如下:

MySqlConnection con = new MySqlConnection("Connection_String");
con.Open();
MySqlCommand _cmd = con.CreateCommand();

string dt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

_cmd.CommandText = "UPDATE requests SET dtprint = " + dt + " WHERE idPerson = " + _personID[index];

_cmd.ExecuteNonQuery();

con.Close();

我不断收到的异常是:附加信息:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“14:03:23 WHERE idPerson = 45”附近使用正确的语法。

我唯一能想到的是数据库没有将时间识别为时间戳,非常感谢任何帮助。

【问题讨论】:

  • dtprintidPerson 列的类型是什么?而且您应该始终使用参数化查询。这种字符串连接对 SQL 注入攻击是开放的。如果您的dtprinttimestamp,则应将其添加为DateTime,而不是string
  • dtprint 是 timestamp 类型,idPerson 是 int 类型
  • 在日期字符串周围加上单引号。 '" + dt + "'
  • 您是否有权将 UPDATE 命令转换为存储过程..?如果是这样的话..我也建议转换 UPDATE 语句以利用参数化查询并将 _cmd.ExecuteNonQuery(); 包装在 try{}catch(SqlException sqlEx{show the sqlEx.Message here} 以便您可以捕获 SQLException跨度>

标签: c# mysql datetime timestamp


【解决方案1】:

由于dtstring 而您的dtprinttimestamp,因此您在尝试插入时需要使用单引号。喜欢;

"UPDATE requests SET dtprint = '" + dt + "' WHERE

但不要这样用。

您应该始终使用parameterized queries。这种字符串连接对SQL Injection 攻击开放。

也可以使用using statement 来处理您的数据库连接和对象。

using(MySqlConnection con = new MySqlConnection(ConnectionString))
using(MySqlCommand _cmd = con.CreateCommand())
{
    string dt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
    _cmd.CommandText = @"UPDATE requests SET dtprint = @dtprint
                         WHERE idPerson = @id";
    _cmd.Parameters.Add("@dtprint", MySqlType.TimeStamp).Value = dt; 
    _cmd.Parameters.Add("@id", MySqlType.Int).Value = _personID[index];
     con.Open();
    _cmd.ExecuteNonQuery();      
}

【讨论】:

    猜你喜欢
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2021-01-04
    • 2020-09-11
    • 2019-12-24
    相关资源
    最近更新 更多