现在的位置: 首页 > 综合 > 正文

细说EXCEL的数据导入问题

2013年09月07日 ⁄ 综合 ⁄ 共 2081字 ⁄ 字号 评论关闭

        这两天在做一个数据上传的功能,是根据一个工单号,自动生成一定数量的条码,然后上传到数据库中。由于数量太多(达到上万),用循环插入时,老是说数据库连接超时,后来实用ADO.NET的连接池功能,还是出现连接超时的问题。自己在这方面的知识有限,但时间紧迫,只好另寻它法。于是找到用SQL语句把EXCEL中的数据导入数据库中的方法。过程是现在EXCEL里面生成条码,工单号信息,然后上传到数据库中去。具体方法如下(一下是收集兼总结):

       

第一步:先开启数据库权限服务

在查询分析器里,直接写SQL语句

EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE/ RECONFIGURE WITH OVERRIDE

 

备注:RECONFIGURE 命令后,需要重启SqlServer服务后命令才能生效,而 RECONFIGURE WITH OVERRIDE命令,则命令立即生效。故若不想麻烦,建议使用RECONFIGURE WITH OVERRIDE命令。

 

如果是导入数据到现有表,则采用
INSERT INTO
SELECT * FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;DATABASE=c:/test.xls',sheet1$)
的形式

 

注意:“c:/test.xls”必须与数据库服务器在同一个机器上,命令才能生效。否则会出现“OLE   DB   提供程序   'Microsoft.Jet.OLEDB.4.0'   不包含表   'a1'。该表可能不存在,或当前用户没有使用该表的权限。”错误提示。

 

如果是导入数据并新增表,则采用
SELECT * INTO
FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;DATABASE=c:/test.xls',sheet1$)
的形式。

 

 

以上语句是将EXCEL文件里SHEET1工作表中所有的列都读进来,如果只想导部分列,可以
INSERT INTO
(a1,a2,a3) SELECT a1,a2,a3 FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;DATABASE=c:/test.xls',sheet1$)

其实可以将OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;DATABASE=c:/test.xls',sheet1$)
当成一个表,例如我就写过这样一个句子:

INSERT INTO eval_channel_employee(channel,employee_id)
SELECT CASE a.
渠道 WHEN 'DIY' THEN 1 WHEN 'RDC' THEN 0 WHEN 'KCM' THEN 2 ELSE 3 END
,b.id FROM
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;DATABASE=c:/temp/name.xls',sheet1$) AS a,pers_employee b
WHERE a.
员工编码=b.code

     上面是把EXCEL数据导入到数据库中去的详细语法及我碰到的问题。但我在最后还是碰到一个问题:“找不到 Microsoft.Jet.Oledb.4.0 程序“,这个问题与下面这个问题相似:

vs2005开发aspx程序(dot net2.0)、访问Acess数据库时候出现错误 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。

一下是解决这一问题过程,贴出来让有需要的朋友参考参考

1.检查链接字符串书写是否正确,"Provider=Microsoft.Jet.Oledb.4.0;Data Source=数据库路径"

拼写无误,问题仍存在

2.注册组件 regsvr32 msjetoledb40.dll 问题依然存在

3.重新安装MDAC28.exe,无奈问题还存在。

网上关于这个错误的解决办法一般就以上三种,那我的问题出现在哪里呢?会不会是权限问题?

4.打开注册表(开始菜单--》运行--regedit,搜索“Microsoft.Jet.Oledb.4.0,查看权限,发现未给iis_wpg读取权限。

于是给“Microsoft.Jet.Oledb.4.0项加上Everyone读取权限。

刷新一下页面,居然OK了。。呵呵。。

后话:不给“Microsoft.Jet.Oledb.4.0项加上Everyone读取权限,只加iis_wpg读取权限情况是否能行,还未测试。

       上面这一段是我在查找我遇到的问题时找到的文章。不过看看这篇文章后面的评论,好像好多人都没有解决问题。但我还是准备按上面文章中的说法去解决问题,就在这个时候,我的问题突然好了,后来在我反复试验发现,只要把“任务面板控制器”里的EXCEL进程关掉就好了。



       

  

抱歉!评论已关闭.