从Excel导入大批量的数据到Access中,要求速度!!

JKing 2011-03-31 10:16:10
C#从Excel导入大批量的数据到Access中,

SqlBulkCopy? 不支持 Access

还有那种可以支持执行大批量复制数据操作呢?

不要说循环,太慢。。。

另外,从DataGridView导出到Excel,数据量比较大时有什么方法比较快?
...全文
336 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
assky124 2011-03-31
  • 打赏
  • 举报
回复
DataGridView导出到Excel?
直接将HTML流保存成.xls
JKing 2011-03-31
  • 打赏
  • 举报
回复
上面最后应该这样写
string strSql = "insert into f_form (name,flag) values (select name,flag from [sheet1$] in " + @"'C:\\mypath\\新建 Microsoft Excel 工作表.xls' 'Excel 8.0;')"
或者
string strSql = "insert into f_form (name,flag) values (select name,flag from [sheet1$] in 'C:\\\\mypath\\\\新建 Microsoft Excel 工作表.xls' 'Excel 8.0;'"
JKing 2011-03-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qldsrx 的回复:]
参考这个,虽然是JAVA的,但是连接用的提供程序也是Microsoft.Jet.OLEDB.4.0,那么SQL写法应该是一样的,相信可以给你带来一点帮助。
[/Quote]
搞定,文件路径中反斜杠的问题,在Access查询中这样写是错的:
insert into f_form (name,flag) values (select name,flag from [sheet1$] in 'C:\mypath\新建 Microsoft Excel 工作表.xls' 'Excel 8.0;')
必须写成双反斜杠,如下
insert into f_form (name,flag) values (select name,flag from [sheet1$] in 'C:\\mypath\\新建 Microsoft Excel 工作表.xls' 'Excel 8.0;')
要达到这种效果,就必须在代码文件中把双反斜杠“\\”按原意传入SQL语句中,如下
insert into f_form (name,flag) values (select name,flag from [sheet1$] in " + @"'C:\\mypath\\新建 Microsoft Excel 工作表.xls' 'Excel 8.0;')
或者
insert into f_form (name,flag) values (select name,flag from [sheet1$] in 'C:\\\\mypath\\\\新建 Microsoft Excel 工作表.xls' 'Excel 8.0;'

OK,这个问题解决了,谢谢 qldsrx 、fangbuge 。
还有导出的问题啊,DataGridView导出到Excel??有没有哪位大大有比较快速的方法???
qldsrx 2011-03-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jking8621 的回复:]
引用 6 楼 qldsrx 的回复:
你要用单引号将文件路径给框起来啊,不然路径中出现的空格会导致错误。


C# code
sql = "insert into userinfo select userName,userAccount,userStatus from [userinfo$] in '" & Server.MapPath("hbwlUserInfo.xls") ……
[/Quote]
是啊,这个自己试下就知道了,可以先写个查询,把INSERT INTO 部分去掉,加载到DataTable中看看。
小case 2011-03-31
  • 打赏
  • 举报
回复
另外,从DataGridView导出到Excel,数据量比较大时有什么方法比较快?

我一般是转成OFFICE 格式的XML,速度很快,还可以设置字体,表格线
zqysmars 2011-03-31
  • 打赏
  • 举报
回复
这个问题很深奥呀。。。
JKing 2011-03-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 qldsrx 的回复:]
你要用单引号将文件路径给框起来啊,不然路径中出现的空格会导致错误。
[/Quote]
sql = "insert into userinfo select userName,userAccount,userStatus from [userinfo$] in '" & Server.MapPath("hbwlUserInfo.xls")   
& "' 'Excel 8.0;' where userAccount is not null"

userName,userAccount,userStatus 是Excel第一行字段名称吧?
JKing 2011-03-31
  • 打赏
  • 举报
回复
insert into f_form (name,flag) values (select name,flag from [sheet1$] in 'C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\print\新建 Microsoft Excel 工作表.xls' 'Excel 8.0;')

语法错误。 在查询表达式 'select name' 中。
qldsrx 2011-03-31
  • 打赏
  • 举报
回复
你要用单引号将文件路径给框起来啊,不然路径中出现的空格会导致错误。
JKing 2011-03-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fangbuge 的回复:]
关键是SQL语句
sql = "insert into userinfo select userName,userAccount,userStatus from [userinfo$] in '" & Server.MapPath("hbwlUserInfo.xls") 

[/Quote]
直接写Excel文件全名称就行?
试了下,出错,From子句语法错误,SQL语句:
insert into f_form select name,flag from [sheet1$] in C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\print\新建 Microsoft Excel 工作表.xls

fangbuge 2011-03-31
  • 打赏
  • 举报
回复
关键是SQL语句
sql = "insert into userinfo select userName,userAccount,userStatus from [userinfo$] in '" & Server.MapPath("hbwlUserInfo.xls")
「已注销」 2011-03-31
  • 打赏
  • 举报
回复
打开excel,全选复制,在assess 的表中粘贴,我经常这样。
qldsrx 2011-03-31
  • 打赏
  • 举报
回复
参考这个,虽然是JAVA的,但是连接用的提供程序也是Microsoft.Jet.OLEDB.4.0,那么SQL写法应该是一样的,相信可以给你带来一点帮助。
cjh200102 2011-03-31
  • 打赏
  • 举报
回复
除了这些,其它的不清楚。

帮顶。
qldsrx 2011-03-31
  • 打赏
  • 举报
回复
利用剪贴板是最简单的方式,不过有个缺点,就是会清空你之前剪贴板的内容。

bool rowHeadersVisible = dataGridView1.RowHeadersVisible;
dataGridView1.Focus();
dataGridView1.SelectAll();
dataGridView1.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText;
dataGridView1.RowHeadersVisible = false;
SendKeys.SendWait("^c");
var xlsapp = new Excel.Application();
var workbook = xlsapp.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
var sheet1 = (Microsoft.Office.Interop.Excel._Worksheet)workbook.Sheets[1];
Excel.Range cell = (Excel.Range)sheet1.Cells[1, 1];
xlsapp.Visible = true;
cell.Select();
SendKeys.SendWait("^v");
dataGridView1.RowHeadersVisible = rowHeadersVisible;
Clipboard.Clear();

110,567

社区成员

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

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

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