我們知道ASP.NET中使用ADO.NET訪問數據庫,通過OleDb的連接可以訪問Access數據庫(我們非常常用的低端數據庫之一)。本文討論了ASP.NET中可能看到的若干錯誤提示,從中可以發現Access 2000和Access XP創建的數據庫文件在訪問出現錯誤時會給出不太相同的錯誤提示。另一個要點是,希望通過此文,使大家對ASP.Net中Access數據庫文件的NTFS權限設置得到新的認識。
(一)實驗過程
為了敘述方便,舉個具體例子做實驗:應用程序為/test,數據庫存放在D:\wwwroot\test\data\db1.mdb,我們已經知道在ASP.NET中是以一個叫做ASPNET虛擬用戶的身份訪問數據庫的,我們需要給這個賬戶以特定的NTFS權限才能使ASP.Net程序正常運行。
為了得到最嚴格的NTFS權限設置,實驗開始時我們給程序最低的NTFS權限:
a)D:\wwwroot\test\data\文件夾的給用戶ASPNET以如下權限:
允許 拒絕
完全控制 □ □
修改 □ □
讀取及運行 √ □
列出文件夾目錄 √ □
讀取 √ □
寫入 □ □
b)D:\wwwroot\test\data\db1.mdb文件本身給用戶ASPNET以如下權限:
√ 允許將來自父系的可繼承權限傳播給該對象
1.1對於某個只包含有“SELECT”命令的ASPx程序,上述權限設置運行時無障礙,即:上述權限已經滿足這類程序的運行了。
1.2對於包含有“UPDATE”“INSERT”“UPDATE”等命令的ASPx程序
(a)如果db1.mdb是Access 2000創建的數據庫,出現如下錯誤:
“/test”應用程序中的服務器錯誤
--------------------------------------------------------------------------------
Microsoft Jet數據庫引擎打不開文件''D:\wwwroot\test\data\''。它已經被別的用戶以獨占方式打開,或沒有查看數據的權限。
說明:執行當前Web請求期間,出現未處理的異常。請檢查堆棧跟蹤信息,以了解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。
異常詳細信息:System.Data.OleDb.OleDbException:Microsoft Jet數據庫引擎打不開文件''D:\wwwroot\test\data\''。它已經被別的用戶以獨占方式打開,或沒有查看數據的權限。
(b)如果db1.mdb是Access XP創建的數據庫,出現如下錯誤:
“/test”應用程序中的服務器錯誤
--------------------------------------------------------------------------------
操作必須使用一個可更新的查詢。
說明:執行當前Web請求期間,出現未處理的異常。請檢查堆棧跟蹤信息,以了解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。
異常詳細信息:System.Data.OleDb.OleDbException:操作必須使用一個可更新的查詢。
(c)原因初步分析:因為包含有“UPDATE”“INSERT”“UPDATE”等命令,