关于Excel导入SQLServer的说明
近来需要做个将Excel数据导入到SQLServer表中的小程序,查找了一下,解决方法如下:
一、自己编程手动读取Excel文件内容(可采用OLE操作),然后使用SQL语句插入SQLServer目标表,这个方法适应于少量数据,原因你懂的。
二、执行SQL语句插入SQLServer目标表,这个方法效率当然是比较快,原因你懂的。
如下:
print?insert into DestTable(field1,field2) select field1,field2 from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=D:\1.xls',sheet1$)
大伙把上句放到SQL查询分析器中基本都能正确执行,但是真正放到程序执行时,大多会出现这个郁闷的错误提示:
OLE DB 提供程序 'MICROSOFT.JET.OLEDB.4.0' 报错。提供程序未给出有关错误的任何信息。
OLE DB 错误跟踪[OLE/DB Provider 'MICROSOFT.JET.OLEDB.4.0' IDBInitialize::Initialize returned 0x80004005: 提供程序未给出有关错误的任何信息。]。
明明都是同一个SQL语句呀!Google一下,再Google一下,没有答案。好吧,自己分析吧。
下面是我封装一个获取Excel字段的class
class OperatorExcel { Variant s_vExcelApp; Variant s_vWorkBook; Variant s_vSheet; bool s_Init; bool s_Loaded; UINT s_RowCount; UINT s_ColCount; public: OperatorExcel():s_vExcelApp(Unassigned), s_vWorkBook(Unassigned),s_vSheet(Unassigned), s_Init(false),s_Loaded(false),s_RowCount(0),s_ColCount(0) { try { s_vExcelApp=Variant::CreateObject("Excel.Application"); }catch(...) { Application->MessageBoxA("创建Excel对象出错,可能本机未正确安装Excel。","提示",MB_ICONERROR); s_Init=false; return ; } s_vExcelApp.OlePropertySet("Visible",false); s_Init=True; } ~OperatorExcel() { try { if(s_Init) { if(s_Loaded) s_vWorkBook.OleProcedure("Close"); s_vExcelApp.OleFunction("Quit"); s_vExcelApp=Unassigned; s_vWorkBook=Unassigned; s_vSheet=Unassigned; s_Init=False;//销毁后置为未初始化 } }catch(...){} } void Load(String file) { if(s_Init) { s_vExcelApp.OlePropertyGet("WorkBooks").OleProcedure("Open",file.c_str()); s_vWorkBook=s_vExcelApp.OlePropertyGet("ActiveWorkBook"); s_vSheet=s_vWorkBook.OlePropertyGet("ActiveSheet"); s_RowCount=(UINT)s_vSheet.OlePropertyGet("UsedRange").OlePropertyGet("Rows").OlePropertyGet("Count"); s_ColCount=(UINT)s_vSheet.OlePropertyGet("UsedRange").OlePropertyGet("Columns").OlePropertyGet("Count"); s_Loaded=True; } } void GetFieldsName(TStrings *fields) { if(fields) { for(UINT i=1;i<=s_ColCount;++i) { String s=s_vSheet.OlePropertyGet("Cells",1,i).OlePropertyGet("Value"); fields->Add(s); } } } };
瞧了半天,摁是没瞧出什么不对劲,终于在一次未正确释放资源的调试中发现,居然在SQL查询分析器中执行的语句也报上述错误,哎,结果终于一致了,所以当下解决办法就是:打开任务管理器,把未关闭的Excel统统kill,或者在cmd中执行 taskkill /f /im excel.exe 。
然后修改OperatorExcel
class OperatorExcel { Variant s_vExcelApp; Variant s_vWorkBook; Variant s_vSheet; bool s_Init; bool s_Loaded; bool s_Closed; UINT s_RowCount; UINT s_ColCount; public: OperatorExcel():s_vExcelApp(Unassigned), s_vWorkBook(Unassigned),s_vSheet(Unassigned), s_Init(false),s_Loaded(false),s_Closed(false), s_RowCount(0),s_ColCount(0) { } ~OperatorExcel() { try { if(!s_Closed) Destroy(); } catch(...) {} } void Create() { try { s_vExcelApp=Variant::CreateObject("Excel.Application"); }catch(...) { Application->MessageBoxA("创建Excel对象出错,可能本机未正确安装Excel。","提示",MB_ICONERROR); s_Init=false; return ; } s_vExcelApp.OlePropertySet("Visible",false); s_Closed=false; s_Init=True; } void Destroy() { if(s_Init) { if(s_Loaded) s_vWorkBook.OleProcedure("Close"); s_vExcelApp.OleFunction("Quit"); s_vExcelApp=Unassigned; s_vWorkBook=Unassigned; s_vSheet=Unassigned; s_Closed=True;//销毁后置为已关闭 s_Init=False;//销毁后置为未初始化 } } void Load(String file) { if(s_Init) { s_vExcelApp.OlePropertyGet("WorkBooks").OleProcedure("Open",file.c_str()); s_vWorkBook=s_vExcelApp.OlePropertyGet("ActiveWorkBook"); s_vSheet=s_vWorkBook.OlePropertyGet("ActiveSheet"); s_RowCount=(UINT)s_vSheet.OlePropertyGet("UsedRange").OlePropertyGet("Rows").OlePropertyGet("Count"); s_ColCount=(UINT)s_vSheet.OlePropertyGet("UsedRange").OlePropertyGet("Columns").OlePropertyGet("Count"); s_Loaded=True; } } void GetFieldsName(TStrings *fields) { if(fields) { for(UINT i=1;i<=s_ColCount;++i) { String s=s_vSheet.OlePropertyGet("Cells",1,i).OlePropertyGet("Value"); fields->Add(s); } } } };
转载于:https://www.cnblogs.com/seoer/archive/2012/01/06/2314740.html
关于Excel导入SQLServer的说明相关推荐
- powershell excel 导入 sqlserver
powershell excel 导入 sqlserver 更新 多表导入,这之前基础上稍加改动. cls$SqlConnection = New-Object System.Data.SqlClie ...
- Excel导入SqlServer数据库(一)
业务中经常会遇到批量导入数据库的操作,今天总结一下方法. 本文利用三层的架构的思想.将整个业务分成三部分,分别是界面,业务和数据处理. 先介绍第一种方法: 即先将Excel表格的内容转化到DataTa ...
- excel 导入 sqlserver 字符串被截取为255长度解决方案
原文出处: http://blog.csdn.net/xiaoma0529/article/details/21336535 excel表格导入sqlserver数据表中 内容被截取为255长度的字符 ...
- excel导入sqlserver数据库大数据量,可每秒控制数量
数据库代码 USE [Test] GO /****** Object: Table [dbo].[Table_1] Script Date: 11/07/2017 17:27:29 ***** ...
- 对未安装office,不支持excel各版本的数据库进行excel导入sqlserver
现在很多运营商越来越少自己部署服务器了,很多时候都是租用别的服务商的服务器,但这样就有很多麻烦事,比如数据库服务器没安装office,无法直接导入excel的内容 现在有一个稍微复杂点的办法来解决这个 ...
- 大数据量高效导入数据库(以excel导入sqlserver为例)
本人文章陆续转向本人微信公账号发布 公众号:搬砖码农SmallNNN,期望您要是搬砖码农,一起学习探讨,祝您阅读愉快. 最近正在做一个项目,要把excel中的数据导入到sqlserver数据库中,首先 ...
- Excel导入sqlserver
/// <summary> /// 上传Excel /// </summary> /// <returns></returns> public Acti ...
- 把excel导入sqlserver外部表不是预期格式
把导入的文件是从xlsx改成xls类型的,注意不要直接将文件重命名,而是进去表格里面然后将其另存为xls文件!!!
- c#如何实现excel导入到sqlserver,如何实现从sqlserver导出到excel中(详细)
对于从sqlserver中导入.导出excel,虽然sqlserver已经给了较为简单的方式,通过交互式的对话框形式实现,但是有时这种方式存在的很多问题,比方说导入.导出数据不全.而且,对于一个项目而 ...
- sqlserver excel导入数据时有null,为空值
sqlserver excel导入数据时有null,最完美解决办法 1.说明为什么会出现导入的数据会为null? 因为在数据库导入数据时,他会自动检测数据的类型,文字一般检测为nvarchar类型,而 ...
最新文章
- 机器学习——利用K-均值聚类算法对未标注数据分组
- python可以自学吗-大家觉得自学python多久能学会?
- XWiki 11.1 发布,协作式应用开发平台
- MATLAB实战系列(二十三)-基于hough变换的直线检测(附MATLAB源代码)
- Google Map API v2 步步为营 (二)----- Location
- 计算机图形学有序边表作业,《计算机图形学》有序边表填充算法.docx
- android的ListView做表格添加圆角边框
- 移动APP开发工作笔记001---Hbuilder连接苹果手机
- 使用Sonar管理代码质量(一)–简述与安装
- jQuery插件管理方案
- 教你React Native使用fetch实现图片上传
- shell编程入门步步高(三、shell的基本结构)
- 几个支持SCORM的免费平台
- Cadence PSpice 模型5:基于ABM库创建XC6209稳压芯片的PSpice模型实战图文教程
- python3提供了什么函数从标准输入读入一行文本_Python3 提供了print函数从标准输入(如键盘)读入一行文本...
- H264/H265编码视频流媒体播放器EasyWasmPlayer.js控制台循环报错Unsupported排查
- control reaches end of non-void function [-Wreturn-type] 实例分析
- 深度解析大快DKadoop大数据运维管理平台功能
- cadence电阻在哪个库_cadence元件库介绍
- 【新知实验室】TRTC腾讯实时音视频动手实验
热门文章
- apache poi excel显示 base64 图片_java操作Excel一:POI
- mysql5.7.19zip,mysql5.7.19zip详细安装过程和配置
- 好书推荐:OpenSuse
- 聊天机器人5步重塑酒店业
- Hibernate实体类注解中如何忽略某些字段的映射
- Oracle Active database duplication
- 短信猫JAVA二次开发包SMSLib,org.smslib.TimeoutException: No response from device解决方案...
- linux otl oracle数据库连接例子
- Python开发环境搭建方法简述
- WF4.0 RC 对比 Beta2 的变化