【问题标题】:windows service exception in .NET.NET 中的 Windows 服务异常
【发布时间】:2011-08-27 01:17:25
【问题描述】:

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

错误 [HY000][MySQL][ODBC 3.51 Driver] [MySqlid -6​​.0.11-alpha-community] 第 1 行的列 column-name 的日期时间值“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) + "' as DTtimestamp ,'" + e8.sts[counter8].HandleClient + "' as DTparamID Union " + Environment.NewLine; UpdateQuery = 更新参数 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 += 其中 t.groupID=9 和 t.itemID=Temp.DTparamID;

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

现在

UpdateQuery8 = "更新参数" + Environment.NewLine; UpdateQuery8 += "set paramvalue=@paramvalue,date_logged1=@date_logged1,Quality=@Quality,date_logged=@date_logged" + Environment.NewLine; UpdateQuery8 += "其中 groupID=9 和 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();

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

请在这方面帮助我。

提前致谢。

【问题讨论】:

    标签: c# .net datetime


    【解决方案1】:

    始终使用parametrized queries 将数据传递给数据库驱动程序。然后由驱动程序正确格式化您的日期,并避免受到SQL-Injection 攻击。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-05
        • 1970-01-01
        • 2012-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多