先举一个例子:
Sql server 2000中
父表:供商资料
    供商编号  名称
    A001       xxxx       编号A001的数字是半角
子表:供应物品
    供商编号  物品
    a001       aaa    虽然是小写,也可以关联到A001
    A001       bbb
    A001  ccc       虽然编号是全角,也可以关联到半角的A001以上在SQL中没有问题,因为sql中的排序规则是:Chinese_PRC_CI_AS ,(CI 指定不区分大小写,AS 指定区分重音),即大小写认为是一样的, 而且全半角符号也被认为是一样的,这正是所希望的
验证:select case when '('='(' and 'A'='a' then 1 else 0 end 会返回1
可是在.net 2003 C# 环境下, 建立起的如上父子关系表,在选择了父记录A001后,子表只出现第二笔记录,另两笔由于大小写或全半角的区别而不显示出来了问题:在vs.net 2003环境下开发的程序, 如何设定排序规则呢????我有设置DataSet.CaseSensitive (是否区分大小写),但数据集中的关系表的CaseSensitive属性不能设置,而且也不随Dataset.CaseSensitive的变化而变化
也试过设置DataSet.Local (System.Globalization.CultureInfo 区域设置)
都没能解决问题,是否DataColumn.DataType是System.Data.SqlTypes.SqlString型就能解决问题呢?
因为该类型具有SqlCompareOptions属性,可以指定是否忽略大小写,以及相同字义的全半角字视为同一字符, 但这样的话也是很麻烦的, 因为所有的数据都必需手动Fill了

解决方案 »

  1.   

    可以阿
    select * from aa where a='aa'
    可以把 'aa' 'aa' 'aa'的行都取出来的啊
      

  2.   

    忘了说明必需用System.Data.DataRelation 建立关系和约束, 咱要的是从根本上解决问题
      

  3.   


    不知道2005中SqlDataAdapter.Fill会否以SqlString类型自动添加到DataColumn呢?
      

  4.   

    我基本拒绝使用DAtaset,太沉重,意义不大。
      

  5.   

    其实这属于你数据存的有问题,既然“供商编号”是外键,就不能手动随便输入。按照你目前的数据来说,你可以先做一层转换,可以在数据库中查询的时候或者后期处理dataset。
      

  6.   

    这只是一个例子,普遍存在的
    外键不用手动输入,只是在某一个地方的录入限制,并没从根本上杜绝后患,SQL的这种排序规则是很方便的,是好东西,为什么不支持而要拒绝呢