.NET 中的 Windows 服务异常

本文关键字:异常 服务 Windows 中的 NET | 更新日期: 2023-09-27 17:56:32

>我将把应用程序作为Windows应用程序进行测试,然后它将日期时间存储在MySQL数据库中。当我使用 Windows 服务启动此应用程序时,它将引发此异常。

错误 [HY000][MySQL][ODBC 3.51 驱动程序] [MySqlid -6.0.11-alpha-community]第 1 行的列列名称的日期时间值"5/6/2011 9:00:00 AM" 

Windows应用程序采用系统格式,我的系统格式是yyyy-MM-dd hh:mm:ss在 Windows 服务中使用哪种格式。

query18 += "select '" + obj8 + "' as DTvalue ,'" + date8 + "' as DTdatelogged1 ,'" + OpcGroup.QualityToString(e8.sts[counter8].Quality) + "' as DTquality ,'" + DateTime.FromFileTime(e8.sts[counter8]。TimeStamp) + "' 作为 DTtimestamp ,'" + e8.sts[counter8]。HandleClient + "' as DTparamID Union " + Environment.NewLine;更新查询 = 更新参数 t 左连接 + 环境.新行;                    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 += 其中 t.groupID=9 和 t.itemID=Temp.DTparamID;

我的查询喜欢这个时间戳值129500892576718750它将被转换 DateTime.FromFileTime() 函数转换值,如 Windows 应用程序中的"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].质量));  CMD8.Parameters.Add("@date_logged", dt);  CMD8.Parameters.Add("@itemID",e8.sts[counter8].句柄客户端);  CMD8.执行非查询();

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

请在这方面帮助我。

提前谢谢。

.NET 中的 Windows 服务异常

始终使用参数化查询将数据传递到数据库驱动程序。然后由驱动程序正确格式化您的日期,并避免容易受到 SQL 注入攻击。

创建一个日期时间并按照您想要的方式格式化它。不是系统默认值,不是临时用户默认值,而是您想要的默认值。

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

如果我没记错的话,这应该会导致"20110517"。

如果您使用更好的答案之一将代码区域设置设置为 mysql 服务器使用的代码区域设置,则会获得奖励积分。但是上面的那个应该给你一个有效的方法。