2011-05-17 60 views
0

我會將應用程序作爲Windows應用程序進行測試,然後將其存儲在MySQL數據庫中的日期時間。當我將使用Windows服務啓動此應用程序時,它將引發此異常。.NET中的windows服務異常

 
error [HY000][MySQL][ODBC 3.51 Driver] [MySqlid -6.0.11-alpha-community]incorrect datetime value " 5/6/2011 9:00:00 AM" for column column-name at row1 

Windows應用程序佔用系統格式&我的系統格式爲YYYY-MM-DD HH:MM:這是用來格式在Windows業務SS 。

 
query18 += "select '" + obj8 + "' as DTvalue ,'" + date8 + "' as DTdatelogged1 ,'" + OpcGroup.QualityToString(e8.sts[counter8].Quality) + "' as DTquality ,'" + DateTime.FromFileTime(e8.sts[counter8].TimeStamp) + "' as DTtimestamp ,'" + e8.sts[counter8].HandleClient + "' as DTparamID Union " + Environment.NewLine; 

UpdateQuery = Update parameter t Left join + Environment.NewLine; 
        UpdateQuery8 += ( + query18 + ) Temp on" + Environment.NewLine; 
        UpdateQuery8 += t.itemID=Temp.DTparamID+ Environment.NewLine; 
        UpdateQuery8 += set paramvalue=DTvalue, date_logged1=DTdatelogged1,Quality=       DTquality,date_logged=DTtimestamp + Environment.NewLine; 
        UpdateQuery8 += where t.groupID=9 and t.itemID=Temp.DTparamID; 

我的查詢likethis時間戳值是129500892576718750將DateTime.FromFileTime()函數轉換值轉換,如「2011-05-17 12點30分57秒」在Windows應用程序將是寫入到mysql數據庫 但在Windows服務轉換像2011/05/17下午十二時30分57秒值,它會通過我將在窗口服務

現在

 
UpdateQuery8 = "Update parameter " + Environment.NewLine; 
         UpdateQuery8 += "set [email protected],[email protected]_logged1,[email protected],[email protected]_logged" + Environment.NewLine; 
UpdateQuery8 += "where groupID=9 and [email protected]"; 
         cmd8 = new OdbcCommand(UpdateQuery8, con136); 
    cmd8.Parameters.Add("@paramvalue", obj8.ToString()); 
    cmd8.Parameters.Add("@date_logged1", date8); 
cmd8.Parameters.Add("@Quality", OpcGroup.QualityToString(e8.sts[counter8].Quality)); 
    cmd8.Parameters.Add("@date_logged", dt); 
    cmd8.Parameters.Add("@itemID",e8.sts[counter8].HandleClient); 
    cmd8.ExecuteNonQuery(); 

它使用MYSQL數據庫同樣的事情可以不接受將被執行,但沒有更新在數據庫中

請在這方面幫助我。

在此先感謝。

回答

0

創建一個日期時間並以您想要的方式進行格式化。不是系統默認值,也不是臨時用戶默認值,而是您想要的值。

DateTime dt = DateTime.Now; 
String str = dt.ToString("yyyyMMdd"); 

這應該導致「20110517」,如果我沒有錯。

如果您使用其中一個更好的答案,將代碼區域設置爲由mysql服務器使用的區域設置,則會給出獎勵點。但是上面的那個應該給你一個可行的方法。

1

總是使用parametrized queries將數據傳遞給數據庫驅動程序。然後由驅動程序正確設置日期格式,避免受到SQL-Injection攻擊的影響。