張 波
睢寧縣供電公司,江蘇徐州 221215
數據庫系統,是由數據庫及其管理軟件組成的系統。數據庫技術作為一種利用計算機處理能力進行輔助管理數據的方法,其主要的工作范圍就是研究如何組織和存儲數據,如何高效地獲取和處理數據。并且通過研究和分析數據庫的結構、數據的存儲、數據庫管理以及應用的基本理論和實現方法以此來實現對數據庫中的數據進行處理、分析和理解。現如今多數事務處理系統都是在數據庫系統環境下使用數據庫語言例如dBASE,Foxbase, Foxpro,C#等。c#是2006年微軟公司發布的一種新的編程語言。c#語言定義主要是從C和C++繼承而來的且是多種語言的混合體,因此它像Java一樣語法簡潔,像VB6一樣使用簡單,像C++一樣功能強大和靈活。.NET 3.5為C#編程語言增加了實用支持強類型的查詢,可用于和各種形式的數據進行交互。我們使用數據庫語言為事務管理系統建庫,然后用C#語言實現對數據庫的管理。本文以用C#語言處理一數據文件為例,說明C#語言在數據庫中的應用。
用C#語言管理數據庫,主要的工作就是用C#語言直接讀取數據庫文件中的數據。這里以SQLite數據庫文件為例,介紹數據庫文件的結構.SQLite有3類數據庫。除內存數據庫外,SQLite把每個數據庫(main或temp)都存儲到一個單獨的文件中。SQLite數據庫文件由固定大小的“頁(page)”組成。頁的大小可以在512到32768的2的指數,默認大小為1KB。頁大小可以在數據庫剛剛創建時設置,一旦創建了數據庫對象之后,這個值就不能再改變了。
數據庫中所有的頁從1開始順序編號。在具體的實現中,頁號用4字節來表示。文件的第1個頁被稱為page 1,第2個頁被稱為page 2,依此類推。編號為0的頁表示“無此頁”。
頁的類型可以是:Btree頁、空閑頁或溢出頁。一個數據庫文件中可能沒有空閑頁或溢出頁,但必然有Btree頁。庫中第一個頁(page 1)永遠是Btree頁。Page 1的前100個字節是一個對數據庫文件進行描述的“文件頭”。它包括數據庫的版本、格式的版本、頁大小、編碼等所有創建數據庫時設置的永久性參數。關于這個特殊文件頭的文檔在btreeInt.h中,具體格式如下:

偏移量 大小 說明0 16 頭字符串,如果不改源程序,此字符串永遠是"SQLite format 3"。16 2 頁大小(以字節為單位)。18 1文件格式版本(寫)。對于SQLite的當前版本,此值為1。如果該值大于1,表示文件為只讀。SQLite將來版本對此域的規定可能改變。19 1文件格式版本(讀)。對于SQLite的當前版本,此值為1。如果該值大于1,SQLite認為文件格式錯,拒絕打開此文件。SQLite將來版本對此域的規定可能改變。20 1 每頁尾部保留空間的大小。(默認為0)
從偏移22開始的字節元數據變量在btreeInt.h中的定義在此不加描述。
用UltraEdit打 開 文 件foods_test.db,page 1在0X0000~0X03FF。其中文件頭內容如下(深藍色部分):

前16個字節為頭字符串,程序中固定設為”SQLite format 3”。
0X0400 :頁大小,0X0400=1024字節。
0X01:文件格式版本(寫),值為1。
0X01:文件格式版本(讀),值為1。
0X40:Btree內部頁中一個單元最多能夠使用的空間。0X40=64,即25%。
0X20:Btree內部頁中一個單元使用空間的最小值。0X20=32,即12.5%。
0X20:Btree葉子頁中一個單元使用空間的最小值。0X20=32,即12.5%。
0X00000003 :文件修改計數,現在已經修改了3次,分別是1次創建和兩次插入。
從0X20開始的4個字節:空閑頁鏈表首指針。當前值為0,表示該鏈表為空。
從0X24開始的4個字節:文件內空閑頁的數量。當前值為0。
從0X28開始的4個字節:Schema version。當前值為0X00000001。以后,每次sqlite_master表被修改時,此值+1。
從0X38開始的4個字節:采用的字符編碼。此處為0X00000001,表示采用的是UTF-8編碼。在SQLite文件中,所有的整數都采用大端格式,即高位字節在前。
//通過DataSet來讀取數據:
//創建和數據庫的連接
OracleConnection oraCon=new OracleConnection(“user id=112;data source=wmatech;password=414”);
//新建一個DataAdapter用于填充DataSet
OracleDataAdapter oraDap=new OracleDataAdapter(“select *from actor”,oraCon);
DataSet ds=new DataSet();
//填充DataSet
oraDap.Fill(ds);
DataTable _table=ds.Tables[0];
//查看表中數據的列數
int count=_table.Rows.Count;
DataGrid1.DataSource=_table;
DataGrid1.DataBind();
//通過DataReader來讀取數據:
OracleConnection oraCon=new OracleConnection(“user id=112;data source=wmatech;password=414”);
//新建一個對數據庫操作的實例
OracleCommand oraCmd=new
OracleCommand(“select * from actor”,oraCon);
oraCon.Open();
OracleDataReader oraRD= oraCmd.ExecuteReader();
string szHtml=””;
while (oraRD.Read())
{
szHtml+=oraRD[0].ToString()+”  ;
“+oraRD[1].ToString()+” ;
“+oraRD[2].ToString()+”
”;
}
oraRD.Close();
使用C#語言進行數據庫操作可方便快捷的進行數據的讀取,效率很高。利用本文介紹的方法可對數據庫進行多種形式的管理,例如實現對數據庫文件的壓縮、展開,顯示數據庫結構,輸出記錄等操作,這有利于提高程序的可移植性。