• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

怎样改变DataTable各列的顺序?

bwangel 2008-09-11 08:43:53
CSDN的相关问题有一堆,看了也没解决.

我的问题是这样的, 读取Excel中的数据组成DataTable,然后用SqlBuckCopy的功能导入到sqlserver中,我不想用拼接sql来循环插入. 因为BuckCopy所需要的只是一个DataTable.效率比循环高很多. 而且我面临的是上千张表的导入.不可能每张表写一个sql的insert.

但是有时Excel中字段顺序和sql字段顺序不一样.所以需要改变已有的DataTable中列的顺序. 要不然导入会对不上号.

...全文
1819 点赞 收藏 16
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Binea 2011-10-19
学习了,谢谢
回复
mcycsnd007 2011-05-06
好 学习了
回复
iamybj 2008-09-16
[Quote=引用 11 楼 peterb 的回复:]
SqlBuckCopy不是可以设置字段Mapping的吗?
[/Quote]
此兄回答道点子上了,别的方法都不是最好的。
关系数据库的一个标准就是,不在乎列的顺序。
回复
gh_li 2008-09-16
[Quote=引用 10 楼 hbxtlhx 的回复:]
SetOrdinal是对的:


DataTable dt=new DataTable();
dt.Columns.Add("a");
dt.Columns.Add("b"); //dt中 a, b


dt.Columns["b"].SetOrdinal(0); //dt中b, a
[/Quote]
正解
回复
peterb 2008-09-16
SqlBuckCopy不是可以设置字段Mapping的吗?
回复
SetOrdinal是对的:


DataTable dt=new DataTable();
dt.Columns.Add("a");
dt.Columns.Add("b"); //dt中 a, b


dt.Columns["b"].SetOrdinal(0); //dt中b, a
回复
yanlongwuhui 2008-09-16
关注中
回复
MasterOfBank 2008-09-16
DataTable.Columns["MONEY"].SetOrdinal[4];
好厉害
回复
lee118 2008-09-16
把列名为"MONEY"的列移至第5列
DataTable.Columns["MONEY"].SetOrdinal[4];
回复
LovingAlison 2008-09-16
用循环去逐行交换不同列的值
比如你dt里边是列a,b,c
然后你数据表中是a,c,b
你去逐行循环 交换dt中bc两字段的值
我没有更好的办法了 帮顶吧
回复
zt_100094 2008-09-16
回复
kbryant 2008-09-16
帮顶~
回复
格拉 2008-09-16
帮顶
回复
bwangel 2008-09-16
[Quote=引用 8 楼 MasterOfBank 的回复:]
DataTable.Columns["MONEY"].SetOrdinal[4];
好厉害
[/Quote]
同意

回复
bwangel 2008-09-11
1楼的方案值得考虑. 是纯内存操作.我试试.

我其实用笨办法已经解决了,就是先列出excel字段名,根据用户的拖动操作改变列的顺序(这种情况,用户的干预是免不了的),然后根据此信息生成select语句再进行一次查询得到要求的datatable, 不过进行了两次查询总觉得不爽.因为DataTable已经在内存中了,只是顺序不同而已.
回复
yangh44 2008-09-11
提供个思路:在内存里重新new一个DataTable临时,并创建与Excel目的一样的列,将DataTable源的内容(Row[i][j])分别对应到DataTable临时中,然后在将DataTable临时做为源,将数据放到Excel目标中!即可!
回复
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2008-09-11 08:43
社区公告

让您成为最强悍的C#开发者