DateTime.TryParse使用错误的MSA格式

时间:2018-06-18 10:45:12

标签: sql-server datetime c#-3.0 sqlclr regional-settings

包含DateTime.TryParse的c#sqlclr函数未在新的Windows服务器上返回正确的日期。日期和区域设置在此服务器上采用美国格式而不是GB,并且sql server使用托管服务帐户。

我安装了英语(英国)语言包并删除了旧语言包。更新了英国日期格式的区域设置,并使用控制面板区域设置中的“管理”选项卡将设置复制到欢迎屏幕,系统帐户和新用户。

英国日期解析仍然无效。在我的用户帐户下的powershell中手动调用该函数将返回正确的值。

我尝试根据此列表更改MSA帐户下的注册表设置以匹配我当前的用户,但仍然没有成功。 https://blogs.technet.microsoft.com/askperf/2012/08/16/how-to-change-regional-settings-for-all-users-on-a-computer/

Windows Server 2016 build 14393上的SQL Server 2017(RTM-CU6)

1 个答案:

答案 0 :(得分:1)

要更新托管服务帐户的区域设置(不重新创建),请执行以下操作。

  1. 使用sysinternals中的psexec运行powershell。将密码留空,然后按Enter键。 cmd也可以工作但powershell让你轻松测试功能。

    &安培; 'psexec.exe'-u domain \ msa $ -i powershell

  2. 添加dll并检查功能结果。

    Add-Type -Path“path \ clr.dll”
    [TypeConverter] :: ftn_ConvertToDate(“20/10/2017 00:00”);

  3. 返回的结果不正确。在powershell中运行intl.cpl。这将以msa用户身份打开区域设置。根据需要将格式设置为英语(英国)或其他格式。这将更改运行powershell会话的MSA的设置。

  4. 再次测试以查看正确的结果。

    [TypeConverter] :: ftn_ConvertToDate(“20/10/2017 00:00”);

  5. 重新启动SQL服务,clr函数将使用新的日期格式。