現象:
運行.Net的程式時,提示:“無法更新資料庫 "C:/PROGRAM FILES/MICROSOFT ASP.NET/ASP.NET AJAX SAMPLE APPLICATIONS/V1.0.61025/CONTACTS/APP_DATA/CONTACTS.MDF",因為資料庫是唯讀。”
環境:
<connectionStrings>
<!--Integrated Security=true;User Instance=True-->
<add name="ContactsConnectionString" connectionString="Data Source=.;AttachDbFilename=|DataDirectory|/Contacts.mdf;uid=sa;pwd=123456;" providerName="System.Data.SqlClient"/>
</connectionStrings>
- 運行 SQL Server Management Studio(開始,運行:Sqlwb):
從設定檔,看不出有什麼問題,已經具有最高許可權了,應該不影響讀寫。但是從資料庫列表中我們卻發現附件的資料庫是“唯讀”狀態。這應該是導致不能修改資料的原因。
原因:
- 附加資料庫時,資料庫檔案的屬性是唯讀。
- 運行SQL Server執行個體的帳戶對附加的資料庫檔案不具備相應的修改許可權。
解決辦法:
在取消檔案的“唯讀”屬性後,查看資料庫屬性可能仍然是“唯讀”的,可能還需要進行下面的操作。
在服務(Services.msc)管理主控台中或者SQL Server組態管理員(Configuration Manager)中查看:
- 如所示,如果啟動SQL Server執行個體的帳戶是Network Service,那麼將其修改為Local Service,然後重新啟動SQL Server執行個體。如果是指定的帳號用於啟動SQL Server執行個體,那麼進行下面操作。
,將本例中運行SQL Server執行個體的帳戶SqlBoot添加到對物理檔案Contacts.mdf的存取權限列表中。如果存在記錄檔,相應地,記錄檔屬性也應添加。其實,這裡我們發現,在上面也可以不修改啟動SQL Server執行個體的帳戶,直接將啟動SQL Server執行個體的帳戶Network Service或者Local Service添加到對資料庫物理檔案的存取權限列表中即可。
附:
CREATE DATABASE Contacts
ON (filename='C:/Program Files/Microsoft ASP.NET/ASP.NET AJAX Sample Applications/v1.0.61025/Contacts/App_Data/Contacts.mdf')
FOR ATTACH
- 關於之前使用“sp_attach_db”附加資料庫,微軟建議不要繼續使用。”重要事項:後續版本的 Microsoft SQL Server 將刪除該功能。請避免在新的開發工作中使用該功能,並應著手修改當前還在使用該功能的應用程式。我們建議您改用 CREATE DATABASE database_name FOR ATTACH。“