2013-10-28 67 views
0

我正試圖把下面的MySqlCommand放在一起。MySQL命令 - 日期錯誤

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列的引用:查詢成功使用DateTime類型與另一列(日期時間)。然而,一個)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工作臺檢查了表定義,它看起來沒事。

不知道如何解決這個問題。 謝謝!

+3

你有一個名爲'?UpdateTime'的列(最後一個)?你的意思是'UpdateTime'還是隻是一個錯字? – Steve

+0

你在用什麼'?'表示您的參數而不是預期的'@'?或者是「可空」列? – Brian

+0

設置一個斷點,實際的命令文本是什麼樣的?我敢打賭,這是史蒂夫所說的,你在第1行的'cols'字符串中有'UpdateTime'。 – sab669

回答

0

如果你的db字段是「datetime」而不是datetime2/offset,它可能是xxx:xxx.379部分的問題。

0

我想通了。

問題實際上是使用SQL查詢語法。

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

對重複密鑰更新不支持和,但需要一個逗號,而不是(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"; 

我沒弄明白早期,因爲我還沒有找到一種方法來看看最終的查詢字符串並檢查佔位符如何被查詢中的參數替換。

謝謝大家的幫助。