国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

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

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

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

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

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

由于dataset和sql server之間的銜接最方便,首先,通過oledb方式將DBF文件的數(shù)據(jù)讀取到dataset中,但在實(shí)際讀取時,OleDbDataAdapter的fill方法讀取到的字段長度是固定的(最大長度),為保證遷入SQL SERVER的同時節(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中建立對應(yīng)的數(shù)據(jù)表,這里需要做一個數(shù)據(jù)類型的轉(zhuǎn)換,以常見的字符型、整型、布爾型、日期型為例,由于是已經(jīng)讀取到datatable中,所以應(yīng)該是判斷系統(tǒng)的數(shù)據(jù)類型轉(zhuǎn)換為對應(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ù)類型和字段長度,在SQL SERVER中建立好對應(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的一個SqlBulkCopy類,這個類用于數(shù)據(jù)庫之間大批量的數(shù)據(jù)傳遞。通常用于新、舊數(shù)據(jù)庫之間數(shù)據(jù)的更新。即使表結(jié)構(gòu)完全不同,也可以通過字段間的對應(yīng)關(guān)系,順利的將數(shù)據(jù)導(dǎo)過來,源數(shù)據(jù)可以用Datatable,也可以用SqlDataReader。因為SqlDataReader不占用內(nèi)存,如果是對大批量的數(shù)據(jù)復(fù)制,不需要事先導(dǎo)入到系統(tǒng),可以優(yōu)先采用DataReader方式,這兩個方式導(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同仁對本文存在的不足能給予指正。

[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ù)類型字段
高速公路改擴(kuò)建高邊坡預(yù)應(yīng)力錨索施工技術(shù)研究
巧用參數(shù)法解答一類定值問題
帶鉤或不帶鉤選擇方框批量自動換
煤矸光電分選輸送機(jī)上料段物料沖擊穩(wěn)定性研究*
如何理解數(shù)據(jù)結(jié)構(gòu)中的抽象數(shù)據(jù)類型
淺談臺灣原版中文圖書的編目經(jīng)驗
首排錨桿錨固段長度對基坑頂?shù)乇砹芽p開展的影響分析
基于SeisBase模型的地震勘探成果數(shù)據(jù)管理系統(tǒng)設(shè)計
線上眾籌產(chǎn)品的特征分析與研究
相似度計算及其在數(shù)據(jù)挖掘中的應(yīng)用