user1549631
user1549631

Reputation: 25

Create a SQLite database with Monotouch - permission denied

I am trying to create a Sqlite database using Monotouch 3.0.3.4. Everything works fine on the iPhone simulator, but I get the following error on the test iPhone:

DataLayer.CreateDatabase Exception: System.UnauthorizedAccessException: Access to the path "/private/var/mobile/Applications/4B4944BB-EC37-4B0C-980C-1A9B60DACB44/TestApp.app/myDatabase.db3" is denied.

Here is the code I am using:

// creates database and tables if they do not exist.
public void CreateDatabase ()
{
string sql = string.Empty;
string dbFileName = "myDatabase.db3";
try {
          if (!File.Exists (dbFileName)) {

    // create database
    SqliteConnection.CreateFile (dbFileName);  //This is where the error occurs
    Console.WriteLine ("CreateDatabase: Database created."); 
            ... 

    }  
      catch (Exception ex) {
        Console.WriteLine ("CreateDatabase Exception: " + ex.ToString ());
    }

    ...

I have also tried specifing the personal folder, but that has no effect. What do I need to do to make sure permissions are correct?

Thanks!

Upvotes: 1

Views: 859

Answers (1)

poupou
poupou

Reputation: 43553

Monotouch 3.0.3.4

That's likely MonoDevelop 3.0.3.4. See About MonoDevelop to get the MonoTouch version.

"/private/var/mobile/Applications/4B4944BB-EC37-4B0C-980C-1A9B60DACB44/TestApp.app/myDatabase.db3"

On devices the applications are signed, so their content can't change (without breaking the signature). As such you're not allowed to change things in the .app directory.

You should create (or copy) the database in the Documents directory and then open the database as read-write.

See the linked article for more details.

Upvotes: 1

Related Questions