当前位置:编程学习 > C#/ASP.NET >>

.Net3.5 和4.0竟如此区别?

clsConst.POINT_DATA_TABLE为一个DataTable,包含编号为1和①的记录各一条,如下代码
s="①";
string strSql = " 编号='" + s + "'";
DataRow[] drs = clsConst.POINT_DATA_TABLE.Select(strSql);
在.Net3.5下编译drs 包含一条记录,结果正确;
在.Net4.0下编译drs 包含2条记录(1、①的全查出来了),不正确!!
Why? --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 试了一下还真是这样的 --------------------编程问答-------------------- 这个问题大家是怎么解决的? --------------------编程问答-------------------- --------------------编程问答--------------------
引用 楼主 602544 的回复:
clsConst.POINT_DATA_TABLE为一个DataTable,包含编号为1和①的记录各一条,如下代码
s="①";
string strSql = " 编号='" + s + "'";
DataRow[] drs = clsConst.POINT_DATA_TABLE.Select(strSql);
在.Net3.5下编译drs 包含一条记录,结果正……

--------------------编程问答-------------------- 这样保存呢

        public DataTable DataSource1()
        {
            DataTable dt = new DataTable();

            dt.Columns.Add("ID", Type.GetType("System.Int32"));
            dt.Columns.Add("Name", Type.GetType("System.String"));

            DataRow dr = dt.NewRow();
            dr["ID"] = 1;
            dr["Name"] = Server.UrlEncode("1");
            dt.Rows.Add(dr);

            DataRow dr1 = dt.NewRow();
            dr1["ID"] = 2;
            dr1["Name"] = Server.UrlEncode("①");
            dt.Rows.Add(dr1);

            return dt;
        }      

这样1还是1,①就变成 %e2%91%a0 了
读的时候 Server.UrlDecode("%e2%91%a0")

--------------------编程问答-------------------- 会不会跟区域语言有关系?.net3.5跟4.0都打了简体中文语言包了吗? --------------------编程问答-------------------- 另外可以查看生成IL代码,有什么区别。 --------------------编程问答-------------------- 也表示不理解,通过区分大小写的设置居然又正确了,求真相

 dt.CaseSensitive = true;
--------------------编程问答-------------------- 。。一试不知道,试了还真是这样的 --------------------编程问答-------------------- 是不是那个值转换的问题? --------------------编程问答-------------------- 还是用2.0比较保险。。。 --------------------编程问答-------------------- 4.0还这么贱,微软自己给自己挖坑 --------------------编程问答-------------------- 微软那是在做模糊批判上下了大功夫,例如Google搜索等,一般我们搜索都喜欢可以找到更多的信息出来,不区分大小写,不区分全角半角,不区分简体繁体,这里就使用了这种技术,而这种技术却不符合你需要精确匹配的要求,那么你就必须有取舍,换其他方式来过滤,比如DataView的RowFilter属性。 --------------------编程问答--------------------
引用 15 楼 qldsrx 的回复:
微软那是在做模糊批判上下了大功夫,例如Google搜索等,一般我们搜索都喜欢可以找到更多的信息出来,不区分大小写,不区分全角半角,不区分简体繁体,这里就使用了这种技术,而这种技术却不符合你需要精确匹配的要求,那么你就必须有取舍,换其他方式来过滤,比如DataView的RowFilter属性。


++1
通过设置区分大小写来判断吧 --------------------编程问答--------------------
DECLARE @A TABLE(ID VARCHAR(10) COLLATE Chinese_PRC_CI_AI)
INSERT @A SELECT '1' UNION ALL SELECT '①'
SELECT * FROM @A WHERE ID='1'

DECLARE @B TABLE(ID VARCHAR(10) COLLATE Chinese_PRC_CI_AS)
INSERT @B SELECT '1' UNION ALL SELECT '①'
SELECT * FROM @B WHERE ID='1'

/*

(所影响的行数为 2 行)

ID         
---------- 
1


(所影响的行数为 2 行)


(所影响的行数为 2 行)

ID         
---------- 
1

(所影响的行数为 1 行)


你可以指定你的排序规则是区分重音.就不会了 --------------------编程问答--------------------
DECLARE @A TABLE(ID VARCHAR(10))
INSERT @A SELECT '1' UNION ALL SELECT '①'

SELECT * FROM @A WHERE ID='1' COLLATE Chinese_PRC_CI_AS
SELECT * FROM @A WHERE ID='1' COLLATE Chinese_PRC_CI_AI

/*
(所影响的行数为 2 行)

ID         
---------- 
1

(所影响的行数为 1 行)

ID         
---------- 
1


(所影响的行数为 2 行)

类似这样的写法. --------------------编程问答-------------------- --------------------编程问答-------------------- 多了就不好办了。 --------------------编程问答-------------------- 哈哈,.NET还是这么蛋疼。


--------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 15 楼 qldsrx 的回复:
微软那是在做模糊批判上下了大功夫,例如Google搜索等,一般我们搜索都喜欢可以找到更多的信息出来,不区分大小写,不区分全角半角,不区分简体繁体,这里就使用了这种技术,而这种技术却不符合你需要精确匹配的要求,那么你就必须有取舍,换其他方式来过滤,比如DataView的RowFilter属性。


--------------------编程问答--------------------

主要使用4.0吧。这个问题应当不是问题。 --------------------编程问答-------------------- 遇到如此蛋疼的问题,不试不知道,一试就出真理啊。 --------------------编程问答-------------------- 2.0的好用! --------------------编程问答-------------------- ①都能找出来,4.0噶强大 --------------------编程问答-------------------- 顶一个,这是.net的问题 --------------------编程问答-------------------- 竟然还真有这样在内存中直接过滤数据的!不会写select语句吗? --------------------编程问答--------------------
引用 10 楼 silverradiance 的回复:
也表示不理解,通过区分大小写的设置居然又正确了,求真相
C# code12 dt.CaseSensitive = true;

知道就好了!如果微软之前说过①不应该算是1的同义词,那么.net4.0是有bug。否则,可能是我们了解的太少,以前不知道而已。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,