1 引言
近年來,國內許多高校逐步建立了網路基礎設施,構建了一些應用系統。但由於缺乏對數字校園總體結構的認識,出現了系統構建各自為政,缺乏統一規劃,已構建的系統互割裂,資訊與資源無法共用,而有些系統則整合度過高、維護與升級困難,網路基礎服務平台與應用系統脫節等問題。
在數字化校園的建設中,URP(University Resource Plan)概念的提出很好地解決了資訊共用等問題。URP通過建立統一的資料庫,制定統一的資訊標準,使各種資訊系統以鬆散耦合的方式整合起來,保障了資料的一致性、可靠性、可用性和安全性。原有系統中的曆史資料,可以通過資料移轉的方式匯入到新系統中。但在資料移轉的過程中,新的問題也隨之而來。
2 資料移轉所面臨的問題
目前,資訊系統的開發大都是利用SQL Server、Oracle、Sybase等大型資料庫,“數字化校園”建設中的資料庫系統也大多採用這幾種資料庫。而Dbase、FoxBASE、FoxPro是我國近年來應用比較廣泛的資料庫開發軟體,高校中仍有很多管理系統採用這種DBF格式的資料庫。隨著新系統的使用,原有系統中多年來積累的大量的寶貴的資料資料如何匯入到新系統中,成為一個要解決的問題,也就是我們將面臨如何將原始的資料移轉到新系統資料庫中。
3 解決思路
統一資料庫的主要目的是實現資料共用,保障資料的一致性。但不論是新的資訊系統,還是原有的資訊系統,每個系統的業務本身並沒有發生本質的變化。因此在資料庫的結構到資料方面,都可以保持基本一致,只是採用的資料庫平台不同。另外,SQL Server自身提供的DTS(Data Transformation Services)工具,也包含了將Dbase、FoxBASE、FoxPro等舊格式資料庫檔案匯入到SQL資料庫的功能。
因此,根據實際的業務需求,利用ASP.NET所提供的資料庫操作功能,配合SQL語句來編程,完全可以替代DTS的所有功能,從而實現大量的曆史資料移轉至新的資料庫系統中。
4 設計與實現
以全國高校畢業生就業管理系統為例,具體說明如何?資料移轉功能。
原系統為教育部統一使用的單機版軟體,採用FoxPro編寫,並使用DBF格式檔案儲存體資料。新系統是採用B/S結構,使用ASP.NET編寫及SQL Server資料庫儲存資料。
在編寫程式進行資料移轉的過程中需要解決以下幾個問題:
(1) 原系統資料檔案為DBF格式,在SQL Server中,DBF檔案所在的檔案夾被認為是一個資料庫,DBF檔案被認為是一個資料表。
(2) 資料移轉過程中,DBF檔案可能存放在用戶端,SQL Server資料庫在伺服器端,這需要將DBF檔案先上傳至伺服器端再進行操作。
(3) 根據使用者業務需求,資料移轉功能應包含初次遷移、追加資料、覆蓋資料等功能。
4.1 DBF檔案上傳
傳統的DBF格式資料檔案,一般檔案體積較小,因此採用ASP.NET提供的上傳組件即可。對於上傳檔案類型,限定為.DBF格式。以上傳學生基本資料表student.dbf為例,上傳功能代碼如下:
//判斷檔案大小是否為0
if (File1.PostedFile.ContentLength>0)
{
string fileExt=Path.GetExtension(File1.
PostedFile.FileName).ToLower();
//判斷是否為DBF格式檔案
if(fileExt!=”.dbf”)
{
//出錯提示
Label1.Text=”只能上傳dbf格式檔案!!“;
}
//合法的非空的dbf檔案
else
{
//指定上傳目錄
string filepath=Server.MapPath(”Data/”);
//上傳至指定目錄中
File1.PostedFile.SaveAs(filepath+
“student.dbf”);
//進行相關資料移轉操作
……
}
}
else
{
//出錯提示
Label1.Text=”上傳檔案位元組數為0!!“;
}
4.2 DBF檔案匯入
若在SQL Server資料庫中不存在目標資料表,則使用匯入並產生新表的命令。匯入並建立新資料表功能代碼如下:
//開啟SQL Server資料庫連接
myConnection.Open();
//filepath為DBF檔案上傳時定義的目標檔案夾
//該語句將指定檔案夾中的student.dbf檔案
//匯入至SQL Server的建立資料表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);
//執行匯入命令
myComm.ExecuteNonQuery();
//關閉資料庫連接
myComm.Dispose();
myConnection.Close();
//操作成功提示資訊
Label2.Text=”匯入並產生學生資料表成功!!“;
4.3 DBF檔案追加
若SQL Server資料庫中已存在student資料表,則使用追加命令匯入資料。追加資料功能代碼如下:
//開啟SQL Server資料庫連接
myConnection.Open();
//filepath為DBF檔案上傳時定義的目標檔案夾
//該語句將指定檔案夾中的student.dbf檔案
//追加至SQL Server的資料表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);
//執行匯入命令
myComm.ExecuteNonQuery();
//關閉資料庫連接
myComm.Dispose();
myConnection.Close();
//操作成功提示資訊
Label2.Text=”匯入學生資料表成功!!“;
4.3 DBF檔案覆蓋
若匯入的資料需覆蓋SQL Server資料庫中原有資料,則需先執行刪除語句,再執行匯入語句。資料覆蓋功能代碼如下:
//開啟SQL Server資料庫連接
myConnection.Open();
//刪除SQL Server中student資料表內容
string creattb=”delete from student”;
//定義SQL命令
SqlCommand myComm=new SqlCommand
(creattb,myConnection);
//執行刪除命令
myComm.ExecuteNonQuery();
//filepath為DBF檔案上傳時定義的目標檔案夾
//該語句用指定檔案夾中的student.dbf檔案
//覆蓋SQL Server資料表student中的資料
creattb=”INSERT INTO student SELECT *
FROM Openrowset(’MSDASQL’,
‘Driver=Microsoft Visual FoxPro Driver;
SourceDB=”+filepath+”;
SourceType=DBF’,’select* from student’)”;
//重新定義SQL命令
myComm.CommandText=creattb;
//執行匯入命令
myComm.ExecuteNonQuery();
//關閉資料庫連接
myComm.Dispose();
myConnection.Close();
//操作成功提示資訊
Label2.Text=”覆蓋學生資料表成功!!“;
從上面的代碼中,可以看出覆蓋操作被分解為刪除、追加兩步執行。
類似的,也可以先刪除SQL Server中的student資料表,然後採用4.1的匯入並產生資料表兩個操作來實現覆蓋資料。其中,刪除資料表可使用SQL 命令“DROP TABLE student”來實現。
5 結 語
在程式的可靠性、準確性等方面,通過對數萬條學生資訊的遷移測試和校正,資料的匯入、追加、覆蓋等功能,完全達到了要求,能將原有的DBF資料檔案準確快速的匯入到SQL Server資料庫中。
DBF資料移轉到SQL Server資料庫中的方法,為解決資料移轉中的穩定性、安全性、準確性等問題提供了有力的協助,有效地解決了大量曆史資料的繼承問題。同樣,這種遷移方法只需替換相應的SQL語句,即可用於MDB檔案、EXCEL檔案以及特定格式的文字檔等各種資料庫檔案的資料移轉中。