我遇到一个问题,C# DateTime 字符串无法转换为 SQL DateTime,因为它神秘地被格式化为英国日期 (dd/MM/yyyy)。以下是这一系列事件:
- 在美国的远程服务器上创建一个对象并序列化为 xml。
- 该 xml 在 CA 的本地计算机上反序列化回对象。序列化日期如下所示:2011-07-13T09:56:57.0542425
- 应用程序尝试调用前面提到的存储过程将对象保存到数据库中。它(不必要)将日期转换为字符串,然后使用 Convert.ToString(DateTime) 将其作为参数传递给存储过程。
- 存储过程失败并出现 SqlException“将数据类型 nvarchar 转换为 datetime 时出错”,因为它收到的 DateTime 类型参数的字符串采用 dd/MM/yyyy 格式(数据库语言为美国英语)。
现在,代码不应该将日期时间转换为字符串,然后再转换回 SQL 中的日期时间,但在一切正常一年多后,这个问题才开始发生(在多台计算机上)。所以我认为数据库或操作系统的文化最近一定发生了变化,导致它们使用不同的日期格式。令我惊讶的是,将操作系统(Windows 7)从英语(加拿大)更改为英语(美国)并重新启动后,问题仍然出现。更令人困惑的是,当本地创建相同类型的对象而不是反序列化时,无论区域设置如何,都不会发生错误。唯一的区别是序列化版本发生在 Windows 服务中,而本地创建的对象版本发生在 Windows 应用程序中。它们都使用自己的调用 Convert.ToString(DateTime) 的程序集副本,但它们使用该程序集的相同版本。我完全困惑了。
附: .NET 2.0 和 SQL Server 2005
为什么不强制格式化DateTime.ToString()
使用您特别想要的区域性——或者指定与您的 SQL 函数期望相匹配的自定义格式规则?
对于自定义格式,您可以查看here或者对于特定于文化的格式,您可以查看here
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)