DataTable中不区分全角数字和半角数字的问题

在一个项目中突然客户反映原来使用得好好的功能现在不能用了,问现象也说不出什么。只是说提示数据重复了。
到现场后发现原来DataTable中将全角数字和半角数字认为是相同的。故本来不同的数据也认为是相同的数据了。
网上查资料得知,添加如下代码可以解决:
DataTable.Locale = CultureInfo.InvariantCulture;
DataTable.CaseSensitive = true;

下面是转自网上的一段关于区域性的描述:
区域性、固定区域性、非特定区域性、特定区域性

区域性名称遵循 RFC 1766 标准,格式为“ - ”,其中 是从 ISO 639-1 派生的由两个小写字母构成的代码, 是从 ISO 3166 派生的由两个大写字母构成的代码。例如,美国英语为“en-US”。在双字母语言代码不可用的情况中,将使用从 ISO 639-2 派生的三字母代码;例如,三字母代码“div”用于使用 Dhivehi 语言的区域。某些区域性名称带有指定书写符号的后缀;例如“-Cyrl”指定西里尔语书写符号,“-Latn”指定拉丁语书写符号。举例:


rel="File-List" href="file:///C:%5CDOCUME%7E1%5C%E7%8E%8B%E5%86%9B%E5%8B%87%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml">

区域性名称

区域性标识符

语言-国家/地区

zh-CN

0x0804

中文-中国

zh-TW

0x0404

中文-台湾

zh-CHS

0x0004

简体中文

zh-CHT

0x 7C 04

繁体中文

en

0x0009

英语

en-US

0x0409

英语-美国

en-GB

0x0809

英语-英国

uz-UZ-Cyrl

0x0843

乌兹别克语(西里尔语)- 乌兹别克斯坦

uz-UZ-Latn

0x0443

乌兹别克语(拉丁)- 乌兹别克斯坦


固定区域性不区分区域性。可以使用空字符串 ("") 按名称或者按区域性标识符 0x007F 来指定固定区域性。固定区域性由CultureInfo类的InvariantCulture属性来代表固定区域性的实例。固定区域性仅与英语语言关联, 不与任何国家/地区关联。它几乎可用在要求区域性的“全局化”命名空间中的所有方法中。如果你的程序进行字符串比较或大小写更改操作,则应该使用 InvariantCulture 确保无论系统如何设置的区域性,行为都将按照InvariantCulture所代表的英语语言的固定区域性来完成。但是,固定区域性必须仅由需要不依赖 区域性的结果的进程(如系统服务)使用;否则,它得到的结果可能在语言上不正确,或者在文化上不合适。举例:CultureInfo Invc = New CultureInfo("");

CultureInfo Invc = CultureInfo.InvariantCulture;这两行代码的作用相同,目的是获得固定区域性实例。

比如你现在要对一个DateTime的实例dateTime执行dateTime.ToString()方法。这个方法实际是使用你当前线程的 CurrentCulture作为默认的区域性,根据这个区域性将日期实例转化为相应的字符串形式。那么如果我们此时不需要它按照线程或系统的区域性进行 ToString操作,那么我们应该用这个方法dateTime.ToString(“G”, CultureInfo.InvariantCulture)或者dateTime.ToString(“G”, DateTimeFormatInfo.InvariantInfo)。

非特定区域性是与某种语言关联但不与国家/地区关联的区域性。特定区域性是与某种语言和某个国家/地区关联的区域性。例如,“en”是非特定区域性,而“en-US”是特定区域性。注意,“zh-CHS”(简体中文)和“zh-CHT”(繁体中文)均为非特定区域性。

区域性有层次结构,即特定区域性的父级是非特定区域性,而非特定区域性的父级是 InvariantCulture。CultureInfo类的Parent属性将返回与特定区域性关联的非特定区域性。如果特定区域性的资源在系统中不 存在,或因其它原因不可用,则使用非特定区域性的资源;如果非特定区域性的资源也不可用,那么使用主程序集中嵌入的资源。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值