Failed to update database "C:\INETPUB\WWWROOT\PORTALEDITOR2\APP_DATA\ASPNETDB.MDF" because the database is read-only. 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for 
more information about the error and where it originated in the code. 

Exception Details: System.Data.SqlClient.SqlException: Failed to update database "C:\INETPUB\WWWROOT\PORTALEDITOR2\APP_DATA\ASPNETDB.MDF" 
because the database is read-only.


Try this:

1. Detach aspnetdb database from SQLEXPRESS using sseutil.exe utility.
2. Remove *.mdf and *.ldf files from App_Data application directory
3. Grant Read/Write access on App_Data to working process identity (ASPNET for IIS5.X or NETWORK SERVICE for IIS6)
4. Copy *.mdf, *.ldf files back into App_Data folder
5. Run application, refresh if any connection related error received

SSEUtil.exe is a tool that lets you easily interact with SQL Server. Among other things

1.  Delete the MDF/LDF files from the App_Data directory of the website under inetpub\wwwroot.  
2.  Download and install the SSEUTIL command line tool from:
      http://www.microsoft.com/downloads/details.aspx?FamilyID=FA87E828-173F-472E-A85C-27ED01CF6B02&displaylang=en
3.  Using sseutil, issue a command that looks something like:  sseutil -child "NT AUTHORITY\NETWORK SERVICE" -detach D:\  .  You 
will need to change the account name and the detach path to match your machine settings.  If on IIS5/5.1, then ASPNET will be the 
correct user account.  Also, you can determine the detach path pretty easily by issuing sseutil -list to see where the problematic 
MDFs are currently attached.  The "D:\" in the sample command line is just the first few characters that sseutil uses to auto-detach 
all databases that begin with "D:\".  Change the path as neeeded for your machine.
4.  Set the ACLs on App_Data directory under inetpub\wwwroot to grant R/W to the appropriate process account - NETWORK SERVICE on 
Windows Server 2003 or ASPNET on IIS5/5.1 (Windows XP). 
5.  Re-copy the MDF/LDF files from the directory where the file-based website exists back into App_Data under inetpub\wwwroot. 
After the copy occurs, check that the MDF/LDF files have now inherited the new ACLs.
6.  Re-run the application (ignore any connection errors that might occur - just hit refresh in the browser).