2011-05-17 61 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攻击的影响。