通過本教程你將學習到如何使用Micorsoft Access數據庫以及一些基本的SQL知識。
所需軟件:Microsoft Access 2000及以上版本
今天,講講我們在編寫ASP程序時會用到的數據庫的基礎知識。對於小型的ASP程序來說,我們一般都使用Access數據庫,因為它操作簡便但是功能強大。Access作為一個中小型的數據庫,足以應付我們使用中所能達到的數據量。 因為Access中包含的內容較為廣泛,所以本教程所講的內容只涉及到作為ASP的後台數據庫相關的內容,Access其它方面的內容,大家可以查閱其它相關資料。Access的各個版本中,Access 2000最為大家所熟知,而後來的Access XP,Access 2003默認的文件格式也均為2000。本教程所采用的Access版本為2003,而文件格式則依然是2000(希望大家分清Access的版本和文件格式,文件格式的轉換可以通過“工具”>“數據庫實用工具”>“轉換數據庫”來操作)。
一、新建Access數據庫
安裝Microsoft Office後,可以從“開始”菜單的“程序”中啟動Access。啟動Access後,點擊“文件”>“新建...”,在任務窗格處會出現新建項目列表(Access2000會略有不同):
選擇“空數據庫”建立一個新的數據庫。在彈出的“保存”對話框中選擇數據庫存放的位置後即可。
打開現有數據庫:要打開已經保存的數據庫可以通過雙擊數據庫文件或者從Access的文件菜單下面的“打開”命令,Access 2003可能會彈出“安全警告”對話框,不用理會,直接打開就行了。
二、設計數據庫
在開始設計數據庫前,需要先向大家講明,一個Access數據庫可以包含多個數據表,而數據表就是我們存放數據的地方。我們說的往數據庫中輸入數據,其實是在往每一個數據表中輸入數據。而關於數據表也要明確幾個概念:字段、記錄和值。在數據庫中,對表的行和列都有特殊的叫法,每一列叫做一個“字段”。每個字段包含某一專題的信息。就像下面的“留言”數據表中,“留言人”、“留言內容”這些都是表中所有行共有的屬性,所以把這些列稱為“留言人”字段和“留言內容”字段。 我們把表中的每一行叫做一個“記錄”,每一個記錄包含這行中的所有信息,就像在“留言”數據表中每一條留言的全部信息,但記錄在數據庫中並沒有專門的記錄名,常常用它所在的行數表示這是第幾個記錄。 在數據庫中存放在表行列交叉處的數據叫做“值”,它是數據庫中最基本的存儲單元,它的位置要由這個表中的記錄和字段來定義。在“留言”的表中就可以看到第一個記錄與“留言人”字段交叉處的值就是“張人中”。“王躍”所在的記錄和“房客號”的這個字段交叉位置上的“值”就是“12450”。
在建立一個新數據庫的時候,也要想一想這個數據庫是用來干什麼的,它要存儲哪些數據信息,這些數據之間又有什麼關系? 一方面要知道哪些數據是必須的,是絕對不能缺少的,不然建立數據庫獲取信息的目地就沒法達到了;另一方面也要知道哪些數據是不必要,放在數據庫當中只會增加數據庫的容量,卻並不起任何作用,所以要將這些冗余的數據剔除。這樣建立起來的數據庫才既能滿足我們檢索數據的需要,又能節省數據的存儲空間。所以我們事先要規劃好我們要建立的表和字段。
在新建完一個數據庫後,Access會打開數據庫。
我們雙擊“使用設計器創建表”,打開數據表設計器。其中“字段名稱”就是指我們數據表的列的名稱,比如上面表中的“留言人”等。數據類型就是數據存放在數據庫中的類型,可以在下拉框中選擇。說明是你對該字段的說明。
比如上圖我設計了一個公告發布的數據表,不同的字段名和相應的數據類型都進行了設置。在設計每一項字段的時候,不同的數據類型在下面的“常規”選項卡會有不同的內容,不過這些內容都比較簡單,而且都可以通過右邊空白部分的藍色提示來進行操作,大家可以自己多看多試,這裡就不贅述了。
這裡要提醒的一點是大家在設計數據庫的時候要注意字段的命名,雖然字段名可以是自己隨便定義的一些名稱,但是希望在給字段命名的時候還是要注意簡單明了,而且盡量不要使用如“user”、“time”這樣的保留名稱。比如我上面設計的數據表,在字段加了“n_”這樣的前綴,就容易區分一些了。我一向命名的方法是比如是“guestbook”數據表,我就會在字段中加個“g_”這樣的前綴,使用起來不會有關鍵字的問題,在程序中也容易識別。ASP程序中,Access數據庫表在給字段命名時可以使用中文,而且在中文Windows的服務器下運行正常,其它語言的Windows下沒有試過。
設計完成後按“Ctrl+S”進行保存,第一次保存需要輸入表名。如果此時數據表沒有定義主鍵,Access會彈出定義主鍵對話框。主鍵就是該數據表在與其它表相關聯時的一個唯一的標識鍵,一般都是自動編號類型或數字型字段。如果不在Access中定義“關系”,可以不設置主鍵。
三、錄入數據:
盡管我們一般都是在ASP程序中進行數據錄入的操作,但我們也可以直接在Access中進行數據的錄入工作。
直接雙擊已經建立的數據表,此時會打開該表,我們直接在表格中輸入數據就行了,不過要注意設計表時定義的字段類型和條件,如果輸入的內容不符合定義的條件則會出錯。
因為Access數據庫是以文件的形式存放在服務器上,所以理論上存在著被下載的可能。如果數據庫中存放著一些重要數據,甚至包括用戶名、密碼或者客戶資料等等,那麼我們就必須考慮到數據庫的安全性,防止別人直接從網上下載我們的數據庫。到底如何防止Access數據庫被惡意下載呢? 首選的方法當然是把數據庫放在Web目錄之外。也就是說,不把數據庫放在可以直接被訪問的Web目錄之內,在ASP程序連接數據庫時使用數據庫在服務器上的絕對路徑。這可以說是最保險的方法。
如果沒有條件達到上述要求,必須把數據庫放在Web目錄中呢,又如何有效的防止數據庫被下載? 第一要做的就是給數據庫取一個長而且復雜的文件名,放在一個名稱復雜的的文件夾下,這雖然只是簡單的一個操作,卻可以避免你的數據庫地址被輕易的獲得。當然這是僅僅不夠的,我們不能保證別人不能用某種的手段或方法獲得你的數據庫地址。所以我們還要用一些其它的方法。
有不少人認為只要把數據庫的.mdb擴展名改為.asp或.asa就可以防止被下載(如Flash8data.ASP),其實這是錯誤的!
這樣只能做到無法從IE地址欄直接下載,而用諸如FlashGet這類下載軟件則可以順利的下載!如果要改為.ASP的話,還必須在數據庫中添加一個“OLE對象”的字段,再在這個字段中添加一個內容為<%的長二進制數據,這樣也可以避免被下載。
也有不少人認為只要在數據庫的文件名中加入“#”號就可以防止被下載(如Flash8#data.ASP),其實這也是錯誤的!
這樣做的原理是IE會把“#”當成網頁的錨記而顯示“無法顯示網頁”,但是其實同樣可以用FlashGet下載。
這裡給大家介紹一個防止數據庫被下載的簡單有效的方法,就是在數據庫的文件名中加入“%”號。
比如:\^data&base^\%Flash8=!=data%.mdb
這是利用url字符編碼的原理,在訪問Internet中的數據時,不論是IE還是其它下載軟件,都會把符號或雙字節字符轉換為"%**"(其中**為16進制數據)這樣的編碼,同樣在遇到"%**"這樣的字符會進行反編碼,所以在上述文件名中,會試圖把“%fl”轉換為相應的字符,文件名就發生了改變,所以就達到了不被下載的目的。其實這裡的FL不是16進制的值,所以下載時服務器會直接報錯,如果是16進制的值比如24,則會反編碼為“$”號,如%24data.mdb會被轉換為$data.mdb,服務器則會顯示找不到文件。如果你再狠一點,可以在相同的目錄下再放置一個$data.mdb的偽數據庫,呵呵,下載的人還會以為撿到了寶,實際上他“辛辛苦苦”下載到的是一個毫無價值只是用來欺騙他的文件。
SQL是我們檢索數據庫中的數據所要必須用到的。我們查詢數據庫中的數據時實際上就是向數據庫發送SQL指令並返回相應的結果。所以這裡給大家一份SQL語法手冊,其中詳細的介紹了SQL的四大類型:Select、Insert、Delete、UPdate以及一些相關的知識。既然是手冊,內容肯定比較全面,大家以後遇到SQL的問題時也可以翻閱該手冊,應該可以得到一些提示。文件不大,只有10K,是個hta文件。