将DBF文件导入Sqlserver数据库

时间:2022-04-27 07:01:34

这里我将具体描述一下dbf 导入 sql2005的操作步骤(access、excel我没试过,解决问题的原理应该一样)!!

 

项目中的问题:用户选择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表就可以了,说明经过一段时间后查询分析器才把这个表关闭。

 

可以直接将dbf文件导入sqlserver数据库,也可以先将dbf文件导入dataset,再将dataset的数据导入数据库。dbf文件导入dataset的具体实现方法如下:

需要引入system.data.Odbc包

 

下面的程序通过Timer定时器,设置定时将本地dbf文件直接存入数据库表,该dbf文件会定时被覆盖掉。

 

 

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支持”,只需要打开“功能的外围应用配置器”设置一下就可以。