怎样改变DataTable各列的顺序?

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

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

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

...全文
2509 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
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的吗?
北京的雾霾天 2008-09-16
  • 打赏
  • 举报
回复
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目标中!即可!

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧