引言
近年來國內許多高校逐步建立了網絡基礎設施構建了一些應用系統但由於缺乏對數字校園總體結構的認識出現了系統構建各自為政缺乏統一規劃已構建的系統互割裂信息與資源無法共享而有些系統則集成度過高維護與升級困難網絡基礎服務平台與應用系統脫節等問題
在數字化校園的建設中URP(University Resource Plan)概念的提出很好地解決了信息共享等問題URP通過建立統一的數據庫制定統一的信息標准使各種信息系統以松散耦合的方式集成起來保障了數據的一致性可靠性可用性和安全性原有系統中的歷史數據可以通過數據遷移的方式導入到新系統中但在數據遷移的過程中新的問題也隨之而來
數據遷移所面臨的問題
目前信息系統的開發大都是利用SQL ServerOracleSybase等大型數據庫數字化校園建設中的數據庫系統也大多采用這幾種數據庫而DbaseFoxBASEFoxPro是我國近年來應用比較廣泛的數據庫開發軟件高校中仍有很多管理系統采用這種DBF格式的數據庫隨著新系統的使用原有系統中多年來積累的大量的寶貴的數據資料如何導入到新系統中成為一個要解決的問題也就是我們將面臨如何將原始的數據遷移到新系統數據庫中
解決思路
統一數據庫的主要目的是實現數據共享保障數據的一致性但不論是新的信息系統還是原有的信息系統每個系統的業務本身並沒有發生本質的變化因此在數據庫的結構到數據方面都可以保持基本一致只是采用的數據庫平台不同另外SQL Server自身提供的DTS(Data Transformation Services)工具也包含了將DbaseFoxBASEFoxPro等舊格式數據庫文件導入到SQL數據庫的功能
因此根據實際的業務需求利用ASPNET所提供的數據庫操作功能配合SQL語句來編程完全可以替代DTS的所有功能從而實現大量的歷史數據遷移至新的數據庫系統中
設計與實現
以全國高校畢業生就業管理系統為例具體說明如何實現數據遷移功能
原系統為教育部統一使用的單機版軟件采用FoxPro編寫並使用DBF格式文件存儲數據新系統是采用B/S結構使用ASPNET編寫及SQL Server數據庫存儲數據
在編寫程序進行數據遷移的過程中需要解決以下幾個問題
() 原系統數據文件為DBF格式在SQL Server中DBF文件所在的文件夾被認為是一個數據庫DBF文件被認為是一個數據表
() 數據遷移過程中DBF文件可能存放在客戶端SQL Server數據庫在服務器端這需要將DBF文件先上傳至服務器端再進行操作
() 根據用戶業務需求數據遷移功能應包含初次遷移追加數據覆蓋數據等功能
DBF文件上傳
傳統的DBF格式數據文件一般文件體積較小因此采用ASPNET提供的上傳組件即可對於上傳文件類型限定為DBF格式以上傳學生基本信息表studentdbf為例上傳功能代碼如下
//判斷文件大小是否為
if (FilePostedFileContentLength>)
{
string fileExt=PathGetExtension(File
PostedFileFileName)ToLower();
//判斷是否為DBF格式文件
if(fileExt!=dbf)
{
//出錯提示
LabelText=只能上傳dbf格式文件!!;
}
//合法的非空的dbf文件
else
{
//指定上傳目錄
string filepath=ServerMapPath(Data/);
//上傳至指定目錄中
FilePostedFileSaveAs(filepath+
studentdbf);
//進行相關數據遷移操作
……
}
}
else
{
//出錯提示
LabelText=上傳文件字節數為!!;
}
DBF文件導入
若在SQL Server數據庫中不存在目標數據表則使用導入並生成新表的命令導入並建立新數據表功能代碼如下
//打開SQL Server數據庫連接
myConnectionOpen();
//filepath為DBF文件上傳時定義的目標文件夾
//該語句將指定文件夾中的studentdbf文件
//導入至SQL Server的新建數據表student中
string creattb=SELECT * INTO student FROM
Openrowset(MSDASQLDriver=Microsoft
Visual FoxPro Driver;SourceDB=+filepath+;
SourceType=DBF select* from student);
//定義SQL命令
SqlCommand myComm=new SqlCommand(
creattbmyConnection);
//執行導入命令
myCommExecuteNonQuery();
//關閉數據庫連接
myCommDispose();
myConnectionClose();
//操作成功提示信息
LabelText=導入並生成學生數據表成功!!;
DBF文件追加
若SQL Server數據庫中已存在student數據表則使用追加命令導入數據追加數據功能代碼如下
//打開SQL Server數據庫連接
myConnectionOpen();
//filepath為DBF文件上傳時定義的目標文件夾
//該語句將指定文件夾中的studentdbf文件
//追加至SQL Server的數據表student中
string creattb=INSERT INTO student
SELECT * FROM Openrowset(MSDASQL
Driver=Microsoft Visual FoxPro Driver;
SourceDB=+filepath+;
SourceType=DBFselect* from student);
//定義SQL命令
SqlCommand myComm=new SqlCommand(
creattbmyConnection);
//執行導入命令
myCommExecuteNonQuery();
//關閉數據庫連接
myCommDispose();
myConnectionClose();
//操作成功提示信息
LabelText=導入學生數據表成功!!;
DBF文件覆蓋
若導入的數據需覆蓋SQL Server數據庫中原有數據則需先執行刪除語句再執行導入語句數據覆蓋功能代碼如下
//打開SQL Server數據庫連接
myConnectionOpen();
//刪除SQL Server中student數據表內容
string creattb=delete from student;
//定義SQL命令
SqlCommand myComm=new SqlCommand
(creattbmyConnection);
//執行刪除命令
myCommExecuteNonQuery();
//filepath為DBF文件上傳時定義的目標文件夾
//該語句用指定文件夾中的studentdbf文件
//覆蓋SQL Server數據表student中的數據
creattb=INSERT INTO student SELECT *
FROM Openrowset(MSDASQL
Driver=Microsoft Visual FoxPro Driver;
SourceDB=+filepath+;
SourceType=DBFselect* from student);
//重新定義SQL命令
myCommCommandText=creattb;
//執行導入命令
myCommExecuteNonQuery();
//關閉數據庫連接
myCommDispose();
myConnectionClose();
//操作成功提示信息
LabelText=覆蓋學生數據表成功!!;
從上面的代碼中可以看出覆蓋操作被分解為刪除追加兩步執行
類似的也可以先刪除SQL Server中的student數據表然後采用的導入並生成數據表兩個操作來實現覆蓋數據其中刪除數據表可使用SQL 命令DROP TABLE student來實現
結 語
在程序的可靠性准確性等方面通過對數萬條學生信息的遷移測試和校驗數據的導入追加覆蓋等功能完全達到了要求能將原有的DBF數據文件准確快速的導入到SQL Server數據庫中
DBF數據遷移到SQL Server數據庫中的方法為解決數據遷移中的穩定性安全性准確性等問題提供了有力的幫助有效地解決了大量歷史數據的繼承問題同樣這種遷移方法只需替換相應的SQL語句即可用於MDB文件EXCEL文件以及特定格式的文本文件等各種數據庫文件的數據遷移中
From:http://tw.wingwit.com/Article/program/net/201311/13312.html