将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的列
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的列
int k=Convert.ToInt32(ds.Tables[0].Rows[0]["RecordKey"]);int k=Convert.ToInt32(ds.Tables[0].Rows[0][0]);
Convert.ToInt32(ds.Tables[0].Rows[0][0])肯定可以,这不用你说。但是这方法通用性不强,你怎么知道会是第几个列(上面只是几个例子)。更何况多层架构中,上层不是我写,别人就更不知道是第几个列了。
////////////
回复人:jupiterII() ( 一星(中级)) 信誉:100 2005-03-07 10:46:00 得分:0
?
to Ninputer(装配脑袋): CaseSensitive只对数据起效.。
---要不这个我早就注意到了谢谢各位
public class TableName
{
public static string FieldName
....
}
主要大家一起使用,就可以避免拼写错误了。
但是现在是业务逻辑已经这么用了(因为以前的DS都从数据库里直接取,不分大小写),现在DAL数据访问层重构了,数据库没有该字段,需要重命名
未处理的“System.ArgumentException”类型的异常出现在 system.data.dll 中。其他信息: 列“recordkey”不属于表 TestTable。如果非要这样做,你还是采用索引吧。
思归呢?
DataTable 在某些时候是区分大小写的,不见得非要改名
建议读 数据库的时候,把 列都写成 大写有些时候,在 程序里写了过多的 硬编码字符串,
后果就是这样,如果很多就郁闷了。如我们公司 前两天改成 德文版的 一个项目
靠,messageBox 里面连变量的那种 就要你命
现在还没改完那,这个子能说是设计者没想到,或考虑不周全。
enum TableDataKey
{
recordkey,
...
}
思归放假了。Ninputer(装配脑袋) 的方法为何不可!
------------------------------------
CaseSensitive只对数据起效.。现在是列名
DataColumn dc;
try
{
dc = dt.Columns["Aaaaa"];
}
catch
{
dc = dt.Columns["aaaaa"];
}