0

次の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 ワークベンチでテーブル定義を確認したところ、問題ないようです。

これを修正する方法がわかりません。ありがとう!

4

2 に答える 2

0

データベース フィールドが datetime2 /offset ではなく「datetime」の場合、xxx:xxx.379 部分に問題がある可能性があります。

于 2013-10-28T16:09:11.117 に答える