到现场后发现原来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属性将返回与特定区域性关联的非特定区域性。如果特定区域性的资源在系统中不 存在,或因其它原因不可用,则使用非特定区域性的资源;如果非特定区域性的资源也不可用,那么使用主程序集中嵌入的资源。