如何在.NET中为两个不同的语言环境使用相同的数据库和相同的程序

时间:2008-12-09 17:17:09

标签: .net localization

我有一个使用SQL Server数据库的C#程序。我已经在一个使用它的国家/地区使用它。作为小数分隔符。 现在我想在另一个使用小数分隔符的国家/地区使用它。

在C#中是否有一些应用程序级别设置,我可以更改或编写一些代码,以便我可以使用相同的数据库和相同的程序?或者我是否必须更改我的整个代码来处理这个新的小数分隔符?

我不知道这是如何工作的。基本上我认为我的Sql查询会出现问题。 例如,我现有的一个陈述是

insert into tblproducts(productId,Price) values('A12',24.10)

现在在新的国家,它将成为

insert into tblproducts(productId,Price) values('A12',24,10)

这会引发错误

所以我必须更改整个代码来处理这种情况吗?

谢谢

3 个答案:

答案 0 :(得分:1)

如果使用字符串连接构建查询,请改用参数。 所以不要写:

 var query = "insert into tblproducts(productId,Price) values('" + article + "','"
    + price + ')';

使用OleDbParameters

 var query = "insert into tblproducts(productId,Price) values(?,?)"
 var cmd = new OleDbCommand(query, connection);
 cmd.Parameters.Add("@article", OleDbType.VarChar).Value = article;
 cmd.Parameters.Add("@price", OleDbType.Single).Value = price;

这将为您节省很多麻烦,包括本地化问题。

答案 1 :(得分:0)

你可以做几件事来解决这个问题。

首先,如果从界面中获取值,则将这些值转换为小数。 Decimal.parse是一个与文化相关的函数,它将使用当前文化来解析值。因此,如果CurrentCulture使用逗号作为小数分隔符,那么您的强制转换将正常工作。 然后,当您从变量输出值时,可以指定decimal.ToString格式,以便始终使用句点作为分隔符输出。

哦,忘了添加。您还可以更改解析以指示Currency,它允许使用逗号和$符号。例如:decimal.parse(amount,NumberStyles.Currency)

答案 2 :(得分:0)

在global.asax.vb文件中,您可以设置当前页面加载的文化:

Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US")
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture

这将使所有文化感知功能都能很好地运作。例如,(5000.25).ToString()将根据您设置的文化使用逗号与句点。此外,将根据用户的文化规则解析从用户读取数字类型的输入。日期将正确显示(12/9/08对比9/12/08)。你基本上可以免费获得所有这些。

当与其他期望同一文化中的所有内容的系统交谈时,这显然会导致问题。要解决此问题,请使用不变文化编写查询:

(5000.25).ToString(CultureInfo.InvariantCulture) 

这将显式地将输出设置为Mysql可以兼容的东西。

注意:如果你有一个合适的数据层并且你将数字类型传递给它,你可以避免很多这样的混乱。

相关问题