繁体   English   中英

.NET中的Windows服务异常

[英]windows service exception in .NET

我将测试该应用程序是否为Windows应用程序,然后将日期时间存储在MySQL数据库中。当我使用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应用程序采用系统格式,而我在Windows服务中使用的格式是yyyy-MM-dd hh:mm: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;

我的查询这样的时间戳值是129500892576718750,它将在Windows应用程序中转换DateTime.FromFileTime()函数转换后的值,例如“ 2011-05-17 12:30:57”,它将被写入mysql数据库,但是在Windows服务中转换后的值,例如2011 / 05/17 12:30:57 PM它不会被MYSQL数据库接受我将在Windows服务中使用的同一件事

现在

UpdateQuery8 = "Update parameter " + Environment.NewLine;
                        UpdateQuery8 += "set paramvalue=@paramvalue,date_logged1=@date_logged1,Quality=@Quality,date_logged=@date_logged" + Environment.NewLine;
UpdateQuery8 += "where groupID=9 and itemID=@itemID";
                        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();

它会执行,但数据库中没有更新

请在这方面帮助我。

提前致谢。

始终使用参数化查询将数据传递到DB驱动程序。 然后,由驱动程序来正确格式化日期格式,并且可以避免受到SQL-Injection攻击的影响。

创建日期时间并以所需的方式对其进行格式化。 不是系统默认值,不是临时用户默认值,就是您想要的默认值。

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

如果我没有记错的话,这应该导致“ 20110517”。

如果您使用更好的答案之一,将代码区域设置设置为mysql服务器使用的语言环境,则会获得加分。 但是上面的一个应该给你一种可行的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM