摘 要:隨著校園網(wǎng)基礎(chǔ)設(shè)施的不斷完善,基于校園網(wǎng)的應(yīng)用得到迅速發(fā)展,數(shù)字化校園建設(shè)成為當(dāng)前國內(nèi)各高校研究的熱點(diǎn)問題。數(shù)字化校園建設(shè)是各高校信息化建設(shè)的重要系統(tǒng)工程,其主要任務(wù)之一是要整合校園內(nèi)的各種數(shù)據(jù)。在整合數(shù)據(jù)的過程中,如何遷移大量歷史數(shù)據(jù)是人們所面臨的一個(gè)重要問題。針對這一問題,以DBF導(dǎo)入SQL Server數(shù)據(jù)庫為例,介紹一種數(shù)據(jù)遷移的方法,并在ASP.NET環(huán)境下,用C#語言實(shí)現(xiàn)了該方法。該方法實(shí)現(xiàn)簡單、導(dǎo)入快速,在整合數(shù)據(jù)的過程中已得到實(shí)際的應(yīng)用,便于實(shí)現(xiàn)其他數(shù)據(jù)環(huán)境之間的數(shù)據(jù)遷移。
關(guān)鍵詞:數(shù)字化校園;數(shù)據(jù)遷移;DBF;SQL Server;ASP.NET
中圖分類號:TP391 文獻(xiàn)標(biāo)識碼:B 文章編號:1004373X(2008)1807103
Data Migration Methods Based on ASP.NET
WANG Qian,WANG Wei
(Xi′an University of Finance and Economics,Xi′an,710061,China)
Abstract:With the constant perfection of the campus network infrastructure,the applications based on campus network are developing rapidly.Digital campus construction becomes a hot topic of research in China universities.Digital campus construction is an important systemic project for modernization education.One of its main tasks is integrating all kinds of intramural.It is how to migrate mass historical data is a facing problem in the process of data integration.As an example,a method of migrate data from DBF to SQL Server database is proposed to solve this problem.This method is realized by C# language in the environment of ASP.NET.It has the property of simple realization and quick data migration,and has already found practical applications in the process of data integration.This method is easy to realize data migration in other data environments.
Keywords:digital campus;data transformation;DBF;SQL Server;ASP.NET
1 引 言
近年來,國內(nèi)許多高校逐步建立了網(wǎng)絡(luò)基礎(chǔ)設(shè)施,構(gòu)建了一些應(yīng)用系統(tǒng)。但由于缺乏對數(shù)字校園總體結(jié)構(gòu)的認(rèn)識,出現(xiàn)了系統(tǒng)構(gòu)建各自為政,缺乏統(tǒng)一規(guī)劃,已構(gòu)建的系統(tǒng)互割裂,信息與資源無法共享,而有些系統(tǒng)則集成度過高、維護(hù)與升級困難,網(wǎng)絡(luò)基礎(chǔ)服務(wù)平臺與應(yīng)用系統(tǒng)脫節(jié)等問題。
在數(shù)字化校園的建設(shè)中,URP(University Resource Plan)概念的提出很好地解決了信息共享等問題。URP通過建立統(tǒng)一的數(shù)據(jù)庫,制定統(tǒng)一的信息標(biāo)準(zhǔn),使各種信息系統(tǒng)以松散耦合的方式集成起來,保障了數(shù)據(jù)的一致性、可靠性、可用性和安全性。原有系統(tǒng)中的歷史數(shù)據(jù),可以通過數(shù)據(jù)遷移的方式導(dǎo)入到新系統(tǒng)中。但在數(shù)據(jù)遷移的過程中,新的問題也隨之而來。
2 數(shù)據(jù)遷移所面臨的問題
目前,信息系統(tǒng)的開發(fā)大都是利用SQL Server,Oracle,Sybase等大型數(shù)據(jù)庫,“數(shù)字化校園”建設(shè)中的數(shù)據(jù)庫系統(tǒng)也大多采用這幾種數(shù)據(jù)庫。而Dbase,F(xiàn)oxBASE,F(xiàn)oxPro是我國近年來應(yīng)用比較廣泛的數(shù)據(jù)庫開發(fā)軟件,高校中仍有很多管理系統(tǒng)采用這種DBF格式的數(shù)據(jù)庫。隨著新系統(tǒng)的使用,原有系統(tǒng)中多年來積累的大量的寶貴的數(shù)據(jù)資料如何導(dǎo)入到新系統(tǒng)中,成為一個(gè)要解決的問題,也就是將面臨如何將原始的數(shù)據(jù)遷移到新系統(tǒng)數(shù)據(jù)庫中。
3 解決思路
統(tǒng)一數(shù)據(jù)庫的主要目的是實(shí)現(xiàn)數(shù)據(jù)共享,保障數(shù)據(jù)的一致性。但不論是新的信息系統(tǒng),還是原有的信息系統(tǒng),每個(gè)系統(tǒng)的業(yè)務(wù)本身并沒有發(fā)生本質(zhì)的變化。因此在數(shù)據(jù)庫的結(jié)構(gòu)到數(shù)據(jù)方面,都可以保持基本一致,只是采用的數(shù)據(jù)庫平臺不同。另外,SQL Server自身提供的DTS(Data Transformation Services)工具,也包含將Dbase,F(xiàn)oxBASE,F(xiàn)oxPro等舊格式數(shù)據(jù)庫文件導(dǎo)入到SQL數(shù)據(jù)庫的功能。
因此,根據(jù)實(shí)際的業(yè)務(wù)需求,利用ASP.NET所提供的數(shù)據(jù)庫操作功能,配合SQL語句編程,完全可以替代DTS的所有功能,從而實(shí)現(xiàn)將大量的歷史數(shù)據(jù)遷移至新的數(shù)據(jù)庫系統(tǒng)中。
4 設(shè)計(jì)與實(shí)現(xiàn)
以全國高校畢業(yè)生就業(yè)管理系統(tǒng)為例,具體說明如何實(shí)現(xiàn)數(shù)據(jù)遷移功能。
原系統(tǒng)為教育部統(tǒng)一使用的單機(jī)版軟件,采用FoxPro編寫,并使用DBF格式文件存儲數(shù)據(jù)。新系統(tǒng)是采用B/S結(jié)構(gòu),使用ASP.NET編寫及SQL Server數(shù)據(jù)庫存儲數(shù)據(jù)。
在編寫程序進(jìn)行數(shù)據(jù)遷移的過程中需要解決以下幾個(gè)問題:
(1)原系統(tǒng)數(shù)據(jù)文件為DBF格式,在SQL Server中,DBF文件所在的文件夾被認(rèn)為是一個(gè)數(shù)據(jù)庫,DBF文件被認(rèn)為是一個(gè)數(shù)據(jù)表。
(2)在數(shù)據(jù)遷移過程中,DBF文件可能存放在客戶端,SQL Server數(shù)據(jù)庫在服務(wù)器端,這需要將DBF文件先上傳至服務(wù)器端再進(jìn)行操作。
(3)根據(jù)用戶業(yè)務(wù)需求,數(shù)據(jù)遷移功能應(yīng)包含初次遷移、追加數(shù)據(jù)、覆蓋數(shù)據(jù)等功能。
4.1 DBF文件上傳
傳統(tǒng)的DBF格式數(shù)據(jù)文件,一般文件體積較小,因此采用ASP.NET提供的上傳組件即可。對于上傳文件類型,限定為.DBF格式。以上傳學(xué)生基本信息表student.dbf為例,上傳功能代碼如下:
//判斷文件大小是否為0
if (File1.PostedFile.ContentLength>0)
{
string fileExt=Path.GetExtension(File1.
PostedFile.FileName).ToLower();
//判斷是否為DBF格式文件
if(fileExt!=\".dbf\")
{
//出錯(cuò)提示
Label1.Text=\"只能上傳DBF格式文件!!\";
}
//合法的非空的DBF文件
else
{
//指定上傳目錄
string filepath=Server.MapPath(\"Data/\");
//上傳至指定目錄中
File1.PostedFile.SaveAs(filepath+
\"student.dbf\");
//進(jìn)行相關(guān)數(shù)據(jù)遷移操作
……
}
}
else
{
//出錯(cuò)提示
Label1.Text=\"上傳文件字節(jié)數(shù)為0!!\";
}
4.2 DBF文件導(dǎo)入
若在SQL Server數(shù)據(jù)庫中不存在目標(biāo)數(shù)據(jù)表,則使用導(dǎo)入并生成新表的命令。導(dǎo)入并建立新數(shù)據(jù)表功能代碼如下:
//打開SQL Server數(shù)據(jù)庫連接
myConnection.Open();
//filepath為DBF文件上傳時(shí)定義的目標(biāo)文件夾
//該語句將指定文件夾中的student.dbf文件
//導(dǎo)入至SQL Server的新建數(shù)據(jù)表student中
string creattb=\"SELECT * INTO student FROM
Openrowset(′MSDASQL′,′Driver=Microsoft
Visual FoxPro Driver;SourceDB=\"+filepath+\";
SourceType=DBF′,′select* from student′)\";
//定義SQL命令
SqlCommand myComm=new SqlCommand(
creattb,myConnection);
//執(zhí)行導(dǎo)入命令
myComm.ExecuteNonQuery();
//關(guān)閉數(shù)據(jù)庫連接
myComm.Dispose();
myConnection.Close();
//操作成功提示信息
Label2.Text=\"導(dǎo)入并生成學(xué)生數(shù)據(jù)表成功!!\";
4.3 DBF文件追加
若SQL Server數(shù)據(jù)庫中已存在student數(shù)據(jù)表,則使用追加命令導(dǎo)入數(shù)據(jù)。追加數(shù)據(jù)功能代碼如下:
//打開SQL Server數(shù)據(jù)庫連接
myConnection.Open();
//filepath為DBF文件上傳時(shí)定義的目標(biāo)文件夾
//該語句將指定文件夾中的student.dbf文件
//追加至SQL Server的數(shù)據(jù)表student中
string creattb=\"INSERT INTO student
SELECT * FROM Openrowset(′MSDASQL′,
′Driver=Microsoft Visual FoxPro Driver;
SourceDB=\"+filepath+\";
SourceType=DBF′,′select* from student′)\";
//定義SQL命令
SqlCommand myComm=new SqlCommand(
creattb,myConnection);
//執(zhí)行導(dǎo)入命令
myComm.ExecuteNonQuery();
//關(guān)閉數(shù)據(jù)庫連接
myComm.Dispose();
myConnection.Close();
//操作成功提示信息
Label2.Text=\"導(dǎo)入學(xué)生數(shù)據(jù)表成功!!\";
4.4 DBF文件覆蓋
若導(dǎo)入的數(shù)據(jù)需要覆蓋SQL Server數(shù)據(jù)庫中原有數(shù)據(jù),則需要先執(zhí)行刪除語句,再執(zhí)行導(dǎo)入語句。數(shù)據(jù)覆蓋功能代碼如下:
//打開SQL Server數(shù)據(jù)庫連接
myConnection.Open();
//刪除SQL Server中student數(shù)據(jù)表內(nèi)容
string creattb=\"delete from student\";
//定義SQL命令
SqlCommand myComm=new SqlCommand
(creattb,myConnection);
//執(zhí)行刪除命令
myComm.ExecuteNonQuery();
//filepath為DBF文件上傳時(shí)定義的目標(biāo)文件夾
//該語句用指定文件夾中的student.dbf文件
//覆蓋SQL Server數(shù)據(jù)表student中的數(shù)據(jù)
creattb=\"INSERT INTO student SELECT *
FROM Openrowset(′MSDASQL′,
′Driver=Microsoft Visual FoxPro Driver;
SourceDB=\"+filepath+\";
SourceType=DBF′,′select* from student′)\";
//重新定義SQL命令
myComm.CommandText=creattb;
//執(zhí)行導(dǎo)入命令
myComm.ExecuteNonQuery();
//關(guān)閉數(shù)據(jù)庫連接
myComm.Dispose();
myConnection.Close();
//操作成功提示信息
Label2.Text=\"覆蓋學(xué)生數(shù)據(jù)表成功!!\";
從上面的代碼可以看出,覆蓋操作被分解為刪除、追加2步執(zhí)行。
類似地,也可以先刪除SQL Server中的student數(shù)據(jù)表,然后采用4.1節(jié)的導(dǎo)入并生成數(shù)據(jù)表操作來實(shí)現(xiàn)覆蓋數(shù)據(jù)。其中,刪除數(shù)據(jù)表可使用SQL 命令\"DROP TABLE student\"來實(shí)現(xiàn)。
5 結(jié) 語
在程序的可靠性、準(zhǔn)確性等方面,通過對數(shù)萬條學(xué)生信息的遷移測試和校驗(yàn),數(shù)據(jù)的導(dǎo)入、追加、覆蓋等功能,完全達(dá)到了要求,能將原有的DBF數(shù)據(jù)文件準(zhǔn)確快速地導(dǎo)入SQL Server數(shù)據(jù)庫中。
DBF數(shù)據(jù)遷移到SQL Server數(shù)據(jù)庫中的方法,為解決數(shù)據(jù)遷移中的穩(wěn)定性、安全性、準(zhǔn)確性等問題提供了有力的幫助,有效地解決了大量歷史數(shù)據(jù)的繼承問題。同樣,這種遷移方法只需替換相應(yīng)的SQL語句,即可用于MDB文件、EXCEL文件以及特定格式的文本文件等各種數(shù)據(jù)庫文件的數(shù)據(jù)遷移中。
參 考 文 獻(xiàn)
[1]張繼東,王穎.數(shù)字化校園URP系統(tǒng)的構(gòu)建[J].北京郵電大學(xué)學(xué)報(bào):社會(huì)科學(xué)版,2008,10(1):7275.
[2]祝偉華,楊丹,桑軍,等.數(shù)字化校園設(shè)計(jì)與構(gòu)建方法研究[J].計(jì)算機(jī)科學(xué),2005,32(8):9799.
[3]崔子筠,羅慶華.建立基于校園網(wǎng)的URP系統(tǒng)[J].微型電腦應(yīng)用,2002,18(7):2527.
[4]熊輝,劉彥峰,郭大慶.分布式異構(gòu)數(shù)據(jù)庫遷移系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2008,34(4):5759.
[5]孔芳,徐汀榮.數(shù)據(jù)遷移工具的設(shè)計(jì)研究[J].計(jì)算機(jī)應(yīng)用與軟件,2005,22(2):133135.
[6]柏瑞芊,榮鵬輝.基于DTS的原始數(shù)據(jù)轉(zhuǎn)換方法研究[J].科技資訊,2006,33:220221.
[7]王勝德,楊學(xué)強(qiáng).利用DTS實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫的數(shù)據(jù)交換[J].計(jì)算機(jī)應(yīng)用,2003,23(7):132134.
[8]梁秀娟.醫(yī)院信息系統(tǒng)升級中的數(shù)據(jù)遷移方案與實(shí)現(xiàn)[J].中國數(shù)字醫(yī)學(xué),2007,2(11):5153.
[9]杜軍威,隋樹林,吳鵬.異構(gòu)數(shù)據(jù)庫之間數(shù)據(jù)遷移的實(shí)現(xiàn)方法[J].青島化工學(xué)院學(xué)報(bào):自然科學(xué)版,2002,23(3):7881.
[10]葛管庫.基于Foxpro與SQL Server數(shù)據(jù)繼承問題的設(shè)計(jì)與實(shí)現(xiàn)[J].洛陽大學(xué)學(xué)報(bào),2002,17(4):5760.
作者簡介 王 倩 女,1973年出生,助理工程師。主要研究方向?yàn)楝F(xiàn)代教育技術(shù)、信息管理等。
王 偉 男,1973年出生,高級工程師。主要研究方向?yàn)橛?jì)算機(jī)網(wǎng)絡(luò)及應(yīng)用、Web程序設(shè)計(jì)、多值邏輯等。