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文件)!

 

其他問題暫時還沒遇到,如果文章中有什麼筆誤 或 其他同行有什麼補充,請留言!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章