次の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 型を他の 1 つの列 (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" は、CultureInfo.InvariantCulture を使用した ParseExactsome の代わりに UctNow を使用すると、タイムゾーン情報が DateTime インスタンスに追加されるのではないかと疑っています。
MySQL ワークベンチでテーブル定義を確認したところ、問題ないようです。
これを修正する方法がわかりません。ありがとう!