dbf/access/excel等数据导入到sql2005

最近在做项目时用到dbf数据库,需要将dbf数据库的结构及内容一起导入到sql2005中。网上找了N多资料发现都是千篇一律copy别人的,问题一大堆。这里总结了一下,安装网上的方法在sql2000中大多数都是可行的,但是在sql2005中就出问题了。

这里我将具体描述一下dbf 导入 sql2005的操作步骤(access、excel我没试过,解决问题的原理应该一样)!!如果感觉麻烦也可以使用我自己开发的dll直接访问dbf并导出sql语句: http://blog.csdn.net/xiaowu218/archive/2010/08/13/5809804.aspx

 

项目中的问题:用户选择N个dbf文件导入sql2005数据库,由于每年dbf表结构都在变化,所以在sql2005中根本就不存在,需要每年根据dbf的结构自动建表。

 

解决方法(摘抄自网络):

    

     --方法一:
         select * into 要生成的SQL表名 from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','dBase IV;HDR=NO;IMEX=2;DATABASE=c:/','select * from dbf表名.dbf')

     --方法二:
         select * into 要生成的SQL表名 from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','dBase III;HDR=NO;IMEX=2;DATABASE=c:/','select * from dbf表名.dbf')

     --方法三:
         select * into 要生成的SQL表名 from openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:/','select * from dbf表名.DBF')

 

        --用前两种方法导入SQL SERVER后,源表再用VFP打开就不提示“不能存取文件”,说明语句执行后就把源表关闭了。不过也有不尽人意的地方,就是用前两种方法导入后,源表中的字符型字段导入后SQL表字段对应变成NVARCHAR了。
--第三种方法有一个缺点:把DBF表导入SQL Server中后,马上用VISUAL FOXPRO打开DBF表,会提示“不能存取文件”,即这个表还被SQL打开着呢。可是过了1分钟左右,再打开DBF表就可以了,说明经过一段时间后查询分析器才把这个表关闭。

 

 

 

我使用第三种方法,实际操作中可能出现的问题:

       正确、完整的sql写法

        
EXEC sp_configure 'show advanced options',1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'Ad Hoc Distributed Queries',1;
GO
RECONFIGURE;
GO

select * Into dbftosql  From openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=C:/','select * from cxcls.dbf')

EXEC sp_configure 'Ad Hoc Distributed Queries',0;
GO
RECONFIGURE;
GO
EXEC sp_configure 'show advanced options',0;
GO
RECONFIGURE;
GO

      1.无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "msdasql" 的数据源对象”;

         原因是安装sql2005数据库的系统中没有 VFPODBC驱动,到http://msdn.microsoft.com/en-us/vfoxpro/bb190233.aspx下载并安装

 

   2.SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问;

      原因是因为“功能的外围应用配置器”中没有“启用openrowset和opendatasource支持”,只需要打开“功能的外围应用配置器”设置一下就可以。当然也可以用sql语句操作:

                        EXEC sp_configure 'show advanced options',1;

                        GO;

                        RECONFIGURE;

                        GO;

                        EXEC sp_configure 'Ad Hoc Distributed Queries',1;

                        GO;

                        RECONFIGURE;

                        GO

     建议操作完成后在关闭这个功能,否则会有安全隐患!关闭的方法和打开相反先

                        EXEC sp_configure 'Ad Hoc Distributed Queries',0;

                        GO;

                        RECONFIGURE;

                        GO;

                        EXEC sp_configure 'show advanced options',0;

                        GO;

                        RECONFIGURE;

                        GO

 

   3.返回了消息 "[Microsoft][ODBC Visual FoxPro Driver]File 'XXXX.dbf' does not exist;

     原因是因为XXXX.dbf文件找不存在或路径不正确,xxxx文件必须是在sql2005服务器而不是你本机(如果数据库不是按装在你本机)。

 

   4.返回了消息 "[Microsoft][ODBC Visual FoxPro Driver]Memo file c:/XXX.fpt is missing or is invalid.

     原因是因为dbf中含有 memo类型的字段,但是导入时在同一个目录中没有找到存储memo的fpt文件(拷贝dbf文件时千万别忘记fpt文件)!

 

其他问题暂时还没遇到,如果文章中有什么笔误 或 其他同行有什么补充,请留言!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值