MySQL命令 - 日期错误

时间:2013-10-28 15:45:56

标签: c# mysql datetime

我正在尝试将以下MySqlCommand放在一起。

string cols = "(DateTime, Ticker, Open, High, Low, Close, Volume, ReqCode, UpdateTime)"; 
string parametrs = "(?DateTime, ?Ticker, ?Open, ?High, ?Low, ?Close, ?Volume, ?ReqCode, ?UpdateTime)"; //, ?UpdateTime)";

try {
    using (MySqlCommand cmd = new MySqlCommand()) {
        cmd.Connection = myConn;
        cmd.CommandText = "INSERT INTO " + schema + cols + " VALUES" + parametrs + "\n ON DUPLICATE KEY UPDATE ReqCode = ?ReqCode AND UpdateTime = ?UpdateTime";
        cmd.Parameters.Add("?DateTime", MySqlDbType.DateTime).Value = aPriceBar.BarTimestamp;
        cmd.Parameters.Add("?Ticker", MySqlDbType.VarChar).Value = aPriceBar.Ticker;
        cmd.Parameters.Add("?Open", MySqlDbType.Decimal).Value = aPriceBar.Open;
        cmd.Parameters.Add("?High", MySqlDbType.Decimal).Value = aPriceBar.High;
        cmd.Parameters.Add("?Low", MySqlDbType.Decimal).Value = aPriceBar.Low;
        cmd.Parameters.Add("?Close", MySqlDbType.Decimal).Value = aPriceBar.Close;
        cmd.Parameters.Add("?Volume", MySqlDbType.UInt32).Value = aPriceBar.Volume;
        cmd.Parameters.Add("?ReqCode", MySqlDbType.VarChar).Value = aPriceBar.ReqCode;
        cmd.Parameters.Add("?UpdateTime", MySqlDbType.DateTime).Value = aPriceBar.ReqTimestamp;
        cmd.ExecuteNonQuery();
    }
} catch (MySqlException ex) {
    Console.WriteLine(ex.Message);
}

当我运行程序时,我遇到以下异常:

  

“您的SQL语法中有错误; ...要使用正确的语法   靠近''2013-10-28 16:23:26.379'

我确信2013-10-28是ReqTimestamp中的日期。

我很惊讶因为当我不向查询添加对UpdateTime列的引用时INSERT查询通过:查询成功使用DateTime类型与另一列(Datetime)。但是,a)aPriceBar.ReqTimestamp是一个DateTime,其中reqTimestamp = DateTime.UtcNow,而b)aPriceBar.BarTimestamp已由

生成
DateTime datetime = DateTime.ParseExact(sFields[0], "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);

''2013-10-28 16:23:26.379':一天之后的“.379”让我怀疑当我使用UctNow时,而不是使用CultureInfo.InvariantCulture的ParseExactsome,一些时区信息被添加到DateTime实例。

我用MySQL工作台检查了表定义,它看起来很好。

不确定如何解决这个问题。 谢谢!

2 个答案:

答案 0 :(得分:0)

如果您的数据库字段是“datetime”而不是datetime2 / offset,则可能是xxx:xxx.379部分的问题。

答案 1 :(得分:0)

我明白了。

问题实际上是SQL查询语法。

cmd.CommandText = "INSERT INTO " + schema + cols + " VALUES" + parametrs + "\n ON DUPLICATE KEY UPDATE ReqCode = ?ReqCode AND UpdateTime = ?UpdateTime";

ON DUPLICATE KEY UPDATE不支持AND但需要逗号(http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

cmd.CommandText = "INSERT INTO " + schema + cols + " VALUES" + parametrs + "\n ON DUPLICATE KEY UPDATE ReqCode = ?ReqCode , UpdateTime = ?UpdateTime";

我之前没有弄清楚,因为我还没有找到查看最终查询字符串的方法,并检查占位符如何被查询中的参数替换。

谢谢大家的帮助。