上下文:我负责运行一个用.NET编写的服务。专有应用。它使用SQL Server数据库。它以本地计算机中Administrators组的用户成员身份运行。在我将机器添加到域之前,它工作得很好。
因此,我将该计算机添加到一个域(Win 2003)中,并将用户更改为Power Users组的成员,现在,
问题:它试图执行的一些SQL语句在西班牙语本地化中是“神奇的”(其中,分隔浮点数而不是.),导致错误。
INSERT语句中的列数少于values子句中指定的值。values子句中的值数必须与INSERT语句中指定的列数匹配。在System.Data.SqlClient.SqlConnection.OnError(SqlException异常时,布尔型breakConnection)
机器中的操作系统和区域设置为英文。我问了应用程序的提供商,他说:
看起来像是在西班牙语环境下运行的代码和在英语环境下运行的SQL server代码的组合。因此SQL需要'15.28‘而不是'15,28’
在我看来,这在不同级别上都是错误的( SQL Server如何区分用于分隔参数的逗号和属于浮点数的逗号?)。
因此,代码似乎从某个地方抓取了西班牙语区域设置,我不知道它是以用户身份运行的,还是在其他地方(可能是全局策略?)。但问题是
哪些地方的本地化是以机器/用户/域为基础定义的?
我不知道所有的地方我必须寻找罪魁祸首,所以请帮我找到它!
发布于 2008-09-12 14:02:34
在.NET中有两种类型的本地化,两种区域性的设置都可以在这些变量中找到(在机器上启动.NET命令行应用程序来查看它说了什么):
System.Thread.CurrentThread.CurrentCulture和System.Thread.CurrentThread.CurrentUICulture
http://msdn.microsoft.com/en-us/library/system.threading.thread_members.aspx
它们与控制面板(区域设置部分)中的设置相关。创建一个.NET命令行应用程序,然后在上面的属性上调用ToString(),这应该会告诉你要查看哪个属性。
编辑:
结果是每个用户的区域设置保存在这里:
HKEY_CURRENT_USER\Control Panel\International
可能有必要检查用户的注册表,并将其与设置为美国或您需要的任何区域设置的用户进行比较。
发布于 2008-09-12 14:02:27
您可以在执行代码的线程上下文中设置它。
System.Threading.Thread.CurrentThread.CurrentCulture
发布于 2008-09-12 14:21:35
太棒了,我创建了控制台应用程序,实际上,这个应用程序并不疯狂,CurrentCulture是西班牙语的,但只针对机器上的用户。如果我以另一个用户的身份运行控制台应用程序,它将返回所有区域性的英语。
我是否应该打开一个新问题,询问用户的区域设置在哪里?
https://stackoverflow.com/questions/59013
复制相似问题