• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      探討VFP9.0到SQL2008的數(shù)據(jù)遷移

      2018-03-22 01:37:14吳昊江蘇省木瀆高級(jí)中學(xué)
      數(shù)碼世界 2018年3期
      關(guān)鍵詞:數(shù)據(jù)類型段長(zhǎng)度字段

      吳昊 江蘇省木瀆高級(jí)中學(xué)

      VFP是Microsoft公司推出的可視化數(shù)據(jù)庫管理系統(tǒng)平臺(tái),是功能強(qiáng)大的32位數(shù)據(jù)庫管理系統(tǒng),對(duì)于輕量化的數(shù)據(jù)管理系統(tǒng)開發(fā)來說,VFP是最為快捷高效的,時(shí)至今日,仍然有不少應(yīng)用是用VFP開發(fā),但隨著WEB應(yīng)用開發(fā)的需求越來越高,MYSQL、SQL、ORACLE這些數(shù)據(jù)庫管理軟件更適合網(wǎng)絡(luò)化時(shí)代的需要,本文就VFP數(shù)據(jù)如何轉(zhuǎn)入SQL SERVER來做一個(gè)探討。

      1 數(shù)據(jù)遷移中需要關(guān)注的問題:

      要注意VFP和SQL SERVER之間的數(shù)據(jù)格式的區(qū)別,如果通過EXCEL進(jìn)行間接轉(zhuǎn)換,原有數(shù)據(jù)表的結(jié)構(gòu)就無法保證了,在做數(shù)據(jù)遷移時(shí),需要把VFP和SQL SERVER的數(shù)據(jù)類型進(jìn)行對(duì)照,在轉(zhuǎn)換過程中,還需要注意到原數(shù)據(jù)中實(shí)際存放的信息,如果是字符型且?guī)в凶冮L(zhǎng)中文的,如姓名字段,那么在遷入SQL SERVER時(shí),對(duì)應(yīng)的數(shù)據(jù)類型應(yīng)該是nvarchar,否則會(huì)導(dǎo)致中文信息無法顯示。DBF中的時(shí)間類型字段T可以僅存儲(chǔ)時(shí)間,無年份日期值,在遷入SQL SERVER的datatime類型時(shí)會(huì)因?yàn)槟攴菔?000而報(bào)錯(cuò),需要提前做好預(yù)處理。

      2 實(shí)現(xiàn)過程:

      由于dataset和sql server之間的銜接最方便,首先,通過oledb方式將DBF文件的數(shù)據(jù)讀取到dataset中,但在實(shí)際讀取時(shí),OleDbDataAdapter的fill方法讀取到的字段長(zhǎng)度是固定的(最大長(zhǎng)度),為保證遷入SQL SERVER的同時(shí)節(jié)省空間,還需要通過FillSchema方法把原DBF的數(shù)據(jù)結(jié)構(gòu)保存下來:

      public DataSet importDbfToDataSet(string FilePath){

      string strDir=Path.GetDirectoryName(FilePath);

      String Tabname=Path.GetFileNameWithoutExtension(FilePath);

      string strSelect = "SELECT * FROM "+Tabname;

      string conStr = @"Provider=VFPOLEDB.1;Data Source=" + strDir + ";Collating Sequence=machine;";

      O l e D b C o n n e c t i o n c o n n = n e w OleDbConnection(conStr);

      conn.Open();

      O l e D b D a t a A d a p t e r d a = n e w OleDbDataAdapter(strSelect, conn);

      DataSet ds = new DataSet();

      da.Fill(ds,"source");

      da.FillSchema(ds, SchemaType.Mapped,"structure");

      //數(shù)據(jù)保存在source表,結(jié)構(gòu)保存在structure表

      conn.Close();

      return thisDataSet;}

      第二步,則是遍歷數(shù)據(jù)集中的結(jié)構(gòu)表,在SQL SERVER中建立對(duì)應(yīng)的數(shù)據(jù)表,這里需要做一個(gè)數(shù)據(jù)類型的轉(zhuǎn)換,以常見的字符型、整型、布爾型、日期型為例,由于是已經(jīng)讀取到datatable中,所以應(yīng)該是判斷系統(tǒng)的數(shù)據(jù)類型轉(zhuǎn)換為對(duì)應(yīng)的SQL SERVER中的數(shù)據(jù)類型:

      public DataType GetDataType(string dataType,int length){

      DataType DTTemp = null;

      switch (dataType){

      case ("System.Decimal"):

      DTTemp = DataType.Decimal(2, 18); break;case ("System.String"):

      DTTemp = DataType.NVarChar(length);break;case ("System.Int32"):

      DTTemp = DataType.Int;break;case ("System.Boolean"):

      DTTemp = DataType.Bit;break;case ("System.DateTime"):

      DTTemp=DataType.DateTime;break;}return DTTemp;}

      根據(jù)讀取到的數(shù)據(jù)類型和字段長(zhǎng)度,在SQL SERVER中建立好對(duì)應(yīng)的數(shù)據(jù)表:

      foreach(DataColumn dc in dtStruc.Columns){

      tempTc = new Column(newTable, dc.ColumnName);tempTc.DataType=GetDataType(dc.DataType.ToString(),dc.MaxLength);

      newTable.Columns.Add(tempTc);}

      前面這些步驟完成后,接下來要用到SQL SERVER的一個(gè)SqlBulkCopy類,這個(gè)類用于數(shù)據(jù)庫之間大批量的數(shù)據(jù)傳遞。通常用于新、舊數(shù)據(jù)庫之間數(shù)據(jù)的更新。即使表結(jié)構(gòu)完全不同,也可以通過字段間的對(duì)應(yīng)關(guān)系,順利的將數(shù)據(jù)導(dǎo)過來,源數(shù)據(jù)可以用Datatable,也可以用SqlDataReader。因?yàn)镾qlDataReader不占用內(nèi)存,如果是對(duì)大批量的數(shù)據(jù)復(fù)制,不需要事先導(dǎo)入到系統(tǒng),可以優(yōu)先采用DataReader方式,這兩個(gè)方式導(dǎo)入數(shù)據(jù)的效率,都要比直接insert into要高得多:

      SqlBulkCopy sbc = new SqlBulkCopy(conn)

      sbc.DestinationTableName = strDesTable;

      sbc.WriteToServer(dt);

      通過以上步驟,可以實(shí)現(xiàn)VFP到SQL的遠(yuǎn)程數(shù)據(jù)遷移,至于SQL SERVER中的數(shù)據(jù)到導(dǎo)出到DBF,通過管理工具中的DTS數(shù)據(jù)轉(zhuǎn)換服務(wù)很方便地實(shí)現(xiàn)。

      希望本文能給那些需要進(jìn)行VFP和SQL SERVER進(jìn)行數(shù)據(jù)遷移的用戶一些幫助,也希望廣大IT同仁對(duì)本文存在的不足能給予指正。

      [1]王倩,王偉.基于ASP.NET的數(shù)據(jù)遷移方法[J].現(xiàn)代電子技術(shù) ,2008(18):71-73.

      [2]柴榮君,馬惠鋮.基于VFP環(huán)境下進(jìn)行數(shù)據(jù)轉(zhuǎn)移的方法探究[J].科技資訊 ,2010(30):28.

      猜你喜歡
      數(shù)據(jù)類型段長(zhǎng)度字段
      圖書館中文圖書編目外包數(shù)據(jù)質(zhì)量控制分析
      詳談Java中的基本數(shù)據(jù)類型與引用數(shù)據(jù)類型
      如何理解數(shù)據(jù)結(jié)構(gòu)中的抽象數(shù)據(jù)類型
      過渡段長(zhǎng)度對(duì)混合梁橋的受力影響
      CNMARC304字段和314字段責(zé)任附注方式解析
      高強(qiáng)鋼組合K型偏心支撐框架耗能梁段長(zhǎng)度研究
      無正題名文獻(xiàn)著錄方法評(píng)述
      關(guān)于CNMARC的3--字段改革的必要性與可行性研究
      不同自由段長(zhǎng)度預(yù)應(yīng)力錨索力學(xué)特性分析
      預(yù)應(yīng)力錨索不同錨固長(zhǎng)度對(duì)錨索及巖體的影響
      河南科技(2013年7期)2013-08-14 05:28:02
      皋兰县| 静海县| 黄冈市| 蕉岭县| 凌源市| 江北区| 石台县| 建德市| 彰化县| 南涧| 永安市| 三穗县| 营口市| 滕州市| 平南县| 河西区| 安吉县| 会同县| 乌拉特后旗| 长寿区| 拉萨市| 溧阳市| 平舆县| 金沙县| 龙里县| 当雄县| 延川县| 景宁| 苗栗市| 卢湾区| 永吉县| 宁晋县| 沽源县| 通榆县| 贵南县| 宁强县| 凤翔县| 上思县| 织金县| 改则县| 桐柏县|