0

上下文:我负责运行一个用 .NET 编写的服务。专有应用程序。它使用 SQL Server 数据库。它作为本地计算机中管理员组的用户成员运行。在我将机器添加到域之前它工作正常。

因此,我将机器添加到域(Win 2003)并将用户更改为 Power Users 组的成员,现在,

问题:它试图执行的一些 SQL 语句在西班牙语本地化中是“神奇的”(其中 , 分隔浮点数而不是 .),从而导致错误。

INSERT 语句中的列数少于 VALUES 子句中指定的值。VALUES 子句中的值数必须与 INSERT 语句中指定的列数相匹配。在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔 breakConnection)

机器中的操作系统和区域设置为英文。我问了应用程序的提供者,他说:

看起来您组合了在西班牙语言环境下运行的代码和在英语语言环境下运行的 SQL 服务器。所以 SQL 需要 '15.28' 而不是 '15,28'

在各个级别对我来说都是错误的(SQL Server 如何区分逗号分隔参数和属于浮点数的逗号?)。

因此,代码似乎从某个地方获取了西班牙语言环境,我不知道它是作为它运行的用户,还是其他地方(可能是全局策略?)。但问题是

在机器/用户/域的基础上定义本地化的地方是什么?

我不知道我必须寻找罪魁祸首的所有地方,所以请帮助我找到它!

4

5 回答 5

3

.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-12T14:02:34.070 回答
1

您可以在执行代码的线程上下文中设置它。

System.Threading.Thread.CurrentThread.CurrentCulture

于 2008-09-12T14:02:26.677 回答
0

太好了,我创建了控制台应用程序,确实,该应用程序并不疯狂,CurrentCulture 是西班牙语,但仅限于那台机器上的那个用户。如果我以另一个用户身份运行控制台应用程序,它将返回所有文化的英语。

我应该打开一个新问题,询问用户明智的语言环境设置在哪里?

于 2008-09-12T14:21:35.227 回答
0

好吧,如果它是特定于用户的,请查看区域和语言选项控制面板。

<rant>顺便说一句,开发人员在使用字符串时没有文化意识。</rant>

于 2008-09-12T14:35:52.320 回答
0

找出为什么它只发生在那台机器上。这是我唯一实际使用该用户登录的地方,然后域控制器将区域设置设置为西班牙语。

于 2008-09-12T14:42:50.057 回答