将DataTable的列DataColumn重命名之后,列名就区分大小写。请问如何解决?
DataSet ds=new DataSet();
DataTable table=new DataTable("TestTable");
ds.Tables.Add(table);
DataColumn dc=new DataColumn("InfoSetKey",typeof(int));
table.Columns.Add(dc);
table.Rows.Add(new object[]{100});
//------------
int i=Convert.ToInt32(ds.Tables[0].Rows[0]["infosetkey"]);//i=100
//------------
ds.Tables[0].Columns["InfoSetKey"].ColumnName="RecordKey";
int j=Convert.ToInt32(ds.Tables[0].Rows[0]["RecordKey"]);//j=100
int k=Convert.ToInt32(ds.Tables[0].Rows[0]["recordkey"]);//Exception:recordkey不是TestTable的列

解决方案 »

  1.   

    如何解决?
    int k=Convert.ToInt32(ds.Tables[0].Rows[0]["RecordKey"]);int k=Convert.ToInt32(ds.Tables[0].Rows[0][0]);
      

  2.   

    ds.CaseSensitive = false就行了
      

  3.   

    to Ninputer(装配脑袋):  CaseSensitive只对数据起效.
      

  4.   

    int k=Convert.ToInt32(ds.Tables[0].Rows[0][0]);这个行吧?
      

  5.   

    TO:alexzhang00,web_gus(penny) ,
    Convert.ToInt32(ds.Tables[0].Rows[0][0])肯定可以,这不用你说。但是这方法通用性不强,你怎么知道会是第几个列(上面只是几个例子)。更何况多层架构中,上层不是我写,别人就更不知道是第几个列了。
    ////////////
     回复人:jupiterII() ( 一星(中级)) 信誉:100  2005-03-07 10:46:00  得分:0

    to Ninputer(装配脑袋): CaseSensitive只对数据起效.。
    ---要不这个我早就注意到了谢谢各位
      

  6.   

    顶一个规范,把所有列名做成类吧,
    public class TableName
    {
      public static string FieldName
    ....
    }
    主要大家一起使用,就可以避免拼写错误了。
      

  7.   

    把所有列名做成类,是一个好方法。
    但是现在是业务逻辑已经这么用了(因为以前的DS都从数据库里直接取,不分大小写),现在DAL数据访问层重构了,数据库没有该字段,需要重命名
      

  8.   

    你的程序在我自己的电脑上运行也出现,
    未处理的“System.ArgumentException”类型的异常出现在 system.data.dll 中。其他信息: 列“recordkey”不属于表 TestTable。如果非要这样做,你还是采用索引吧。
      

  9.   

    现在是业务逻辑已经这么用了(因为以前的DS都从数据库里直接取,不分大小写),现在DAL数据访问层重构了,数据库没有该字段,需要重命名
    思归呢?
      

  10.   

    这个问题我也遇到过,
    DataTable 在某些时候是区分大小写的,不见得非要改名
    建议读 数据库的时候,把 列都写成 大写有些时候,在 程序里写了过多的 硬编码字符串,
    后果就是这样,如果很多就郁闷了。如我们公司 前两天改成 德文版的 一个项目
    靠,messageBox 里面连变量的那种 就要你命
    现在还没改完那,这个子能说是设计者没想到,或考虑不周全。
      

  11.   

    把所有的字段做成枚举咯。
    enum TableDataKey
    {
       recordkey,
       ...
    }
      

  12.   

    思归放假了。Ninputer(装配脑袋) 的方法为何不可!
      

  13.   

    :heiding(黑麒麟) 
    思归放假了。Ninputer(装配脑袋) 的方法为何不可!
    ------------------------------------
    CaseSensitive只对数据起效.。现在是列名
      

  14.   

    具体原因只有去问ms了,这可能是个bug
      

  15.   

    这可能是个bug,有点同意这个看法。有人知道怎么到微硬问吗?
      

  16.   

    你在要用这个列的时候用
    DataColumn dc;
    try
    {
      dc = dt.Columns["Aaaaa"];
    }
    catch
    {
      dc = dt.Columns["aaaaa"];
    }
      

  17.   

    一般可以考虑用ResourceManager,把那些字符串什么的都放到这个资源文件里面,就比较OK了!