我遇到一个问题,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 函数期望相匹配的自定义格式规则?
关于c# - Convert.ToString(DateTime) 产生英国格式而不是美国格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6961092/