2013-10-28 5 views
0

다음 MySqlCommand를 조합하려고합니다.MySQL 명령 - 날짜가 포함 된 버그

"당신은 당신의 SQL 구문에 오류가있다; ... 올바른 구문은 근처 ''사용하기 위해 2013- : 나는이 프로그램을 실행하면

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); 
} 

, 나는 다음과 같은 예외를 잡을 10-28 16 : 23 : 2013년 10월 28일가 ReqTimestamp의 날짜입니다 26.379 '

내가 확실히 알고

삽입 쿼리가 죽 간다 때문에 나는 당황 스럽네요. 쿼리에 UpdateTime 열에 대한 참조를 추가하지 않을 때 : 쿼리가 다른 하나의 열 (Datetime)과 함께 DateTime 형식을 성공적으로 사용합니다. 그러나 a)에서는 aPriceBar.ReqTimestamp b)는 aPriceBar.BarTimestamp

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

': 23 : 26.379 2013년 10월 28일 16'에 의해 생성되었지만 reqTimestamp = DateTime.UtcNow를 날짜 시간은, 인이 " .379 "이후 CultureInfo.InvariantCulture와 함께 ParseExactsome 대신 UctNow를 사용하면 일부 시간대 정보가 DateTime 인스턴스에 추가되는 것으로 의심됩니다.

테이블 정의를 MySQL workbench로 확인했는데 문제가 없습니다.

해결 방법을 잘 모릅니다. 감사합니다.

+3

'? UpdateTime'이라는 열 (마지막 이름)이 있습니까? 'UpdateTime'을 의미합니까 아니면 그냥 오타입니까? – Steve

+0

무엇을 사용하고 계십니까? 예상되는 '@'대신 매개 변수를 나타낼 수 있습니까? 아니면 열이 nullable입니까? – Brian

+0

중단 점을 설정하십시오. 실제 명령 텍스트는 어떻게 생겼습니까? Steve가 1 행의'cols' 문자열에'UpdateTime'을 가지고 있다고 말했을 것입니다. – sab669

답변

0

db 필드가 datetime2/offset 대신 "datetime"인 경우 xxx : xxx.379 부분에 문제가 될 수 있습니다.

0

나는 그것을 알아 냈다.

문제는 실제로 SQL 쿼리 구문과 관련이 있습니다. DUPLICATE KEY UPDATE ON

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"; 

쉼표가 필요하지 않습니다 문자열을 검색하고 자리 표시자를 쿼리의 매개 변수로 대체하는 방법을 확인하십시오.

도움 주셔서 감사합니다.

관련 문제