【问题标题】:Covert C# Datetime to MySql DateTime format将 C# 日期时间转换为 MySql 日期时间格式
【发布时间】:2015-03-23 14:56:33
【问题描述】:

我一直在试图弄清楚如何将当前日期时间从 c# 添加到 mysql 列中,并且该属性/列也是“日期时间”格式。我正在写这段代码。

   if (comboBox1.Text == "Cash On Delivery")
        {
           MessageBox.Show("Your order has been placed.","",MessageBoxButtons.OK);

           string timeString = DateTime.Now.ToString("YYYY-MM-DD HH:MM:SS");

           string constring = "datasource=localhost;port=3306;username=root;password=root";
           string query = "insert into artgallery.payment_method where payment_method ='" +comboBox1.Text+ "' AND payment_date='" +formatForMySql+ "' AND payment_amount = '" +variables.total_amount+ "' ";

         //rest of the code

        }

我收到了一些与我试图在“payment_date”列中插入的 timeString 相关的语法错误。

【问题讨论】:

标签: c# mysql datetime


【解决方案1】:

正确的答案是停止构建 SQL。使用参数化 SQL,然后将 DateTime 值指定为参数值 - 您的代码中根本不需要字符串表示。

目前尚不清楚您正在使用哪个驱动程序(有两个用于 MySQL,IIRC),但您应该查看您正在使用的任何命令类型的 Parameters 属性。

真的使用参数化 SQL 很重要 - 不仅是为了避免这样的转换问题,也是为了防止 SQL Injection Attacks。在我看来,它还使您的代码更易于阅读。

【讨论】:

  • 我没有研究过参数化SQL。您能告诉我此转换可能出现的错误吗?
  • @MirzaTaimoorBaig:嗯,您已经发现您需要确保执行正确的转换 - 并且在您的代码中任何地方都这样做,小心。为什么要继续这种对字符串参数不安全的方法,而不是找出如何使用公认的最佳实践在 SQL 查询中提供值?​​
  • 我完全同意这个防止注入攻击的答案,因为提问者已经将他的原始数据从用户放到 sql 语句中。
  • @ToonSuperLove:如果所有值都是 DateTime 或数值,则不太可能进行 SQL 注入攻击(虽然是 possible - 但值得一试到处使用参数化 SQL 的习惯,IMO。
【解决方案2】:

这样写

INSERT INTO table_name( date_column) VALUES (STR_TO_DATE('2014-12-31 00:00:00','%Y-%m-%d %H:%i:%S')

此外,您将 M(月份的平均值)放在月份和分钟中...... 请在此处再次检查您的格式

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多