日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

将DBF文件导入Sqlserver数据库

發布時間:2023/12/15 综合教程 26 生活家
生活随笔 收集整理的這篇文章主要介紹了 将DBF文件导入Sqlserver数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目中的問題:用戶選擇N個dbf文件導入sql2005數據庫,由于每年dbf表結構都在變化,所以在sql2005中根本就不存在,需要每年根據dbf的結構自動建表。(文章來自http://blog.csdn.net/whuyi/article/details/5990205)

解決方法(摘抄自網絡):

--方法一:

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包

 public DataSet importDbfToDataSet(string FilePath, string tabname)
        {
            string strConnection = @"Dsn=Visual FoxPro Tables;sourcedb=" + FilePath.Substring(0, FilePath.LastIndexOf("http://")) + ";sourcetype=DBF;exclusive=No;backgroundfetch=Yes;collate=Machine";

            //對于連接串,注意版本問題

            string strSelect = "SELECT * FROM  " + tabname;
            OdbcConnection thisConnection = new OdbcConnection(strConnection);
            thisConnection.Open();
           OdbcDataAdapter thisAdapter = new OdbcDataAdapter(strSelect, thisConnection);
            DataSet thisDataSet = new DataSet();
            try
            {
                thisAdapter.Fill(thisDataSet);
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                thisConnection.Close();
            }
            return thisDataSet;
        }

View Code

下面的程序通過Timer定時器,設置定時將本地dbf文件直接存入數據庫表,該dbf文件會定時被覆蓋掉。

 class Connect
    {
        //定義連接字符串,連接對象,命令對象
        private String connectionstr;
        private SqlConnection connection;
        private SqlCommand command;
        private DataSet dataset;      
        public Connect()
        {
            connectionstr = "Server=192.168.88.59;Initial Catalog=Test; User ID=sa;Password=sasa;";
            connection = new SqlConnection(connectionstr);
            dataset = new DataSet();          
            command = connection.CreateCommand();
            connection.Open();
        }
        public void CreateTimer()
        {
            Timer timer = new Timer();
            timer.Enabled = true;
            timer.Interval = 60 * 1000;//設置一分鐘
            timer.Elapsed+=new ElapsedEventHandler(timer_Elapsed);
        }
        void timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            Connect c = new Connect();
            int minute = e.SignalTime.Minute;
            int iminute = 5;
            if(minute==iminute)//設置每個小時的第五分鐘執行
            c.Insert();
        }
        private void Insert()
        {
            //string filepath = "C;//";
            //將dbf文件導入指定數據庫的表
            string creattb = "select * into tablename from OPENROWSET('MSDASQL','driver=Microsoft visual foxpro driver; sourcedb=c://;SourceType=DBF','select * from RSZ1031.dbf')";
            SqlCommand mycommand = new SqlCommand(creattb, connection);
            mycommand.ExecuteNonQuery();
        }
    }

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支持”,只需要打開“功能的外圍應用配置器”設置一下就可以。

總結

以上是生活随笔為你收集整理的将DBF文件导入Sqlserver数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。