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?

解决方案 »

  1.   

    这样保存呢        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")
      

  2.   

    会不会跟区域语言有关系?.net3.5跟4.0都打了简体中文语言包了吗?
      

  3.   

    也表示不理解,通过区分大小写的设置居然又正确了,求真相 dt.CaseSensitive = true;
      

  4.   

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

  5.   

    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 行)你可以指定你的排序规则是区分重音.就不会了
      

  6.   

    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 行)
    类似这样的写法.
      

  7.   

    哈哈,.NET还是这么蛋疼。
      

  8.   

    竟然还真有这样在内存中直接过滤数据的!不会写select语句吗?
      

  9.   

    知道就好了!如果微软之前说过①不应该算是1的同义词,那么.net4.0是有bug。否则,可能是我们了解的太少,以前不知道而已。